你只能在存储过程中使用动态的匿名块了。
我们提供的服务有:网站制作、网站建设、微信公众号开发、网站优化、网站认证、德令哈ssl等。为成百上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的德令哈网站制作公司
比如:
create or replace procedure pro1(p_tname varchar2) is
v_dy_sql_block varchar2(32767) ;
begin
v_dy_sql_block := ' declare '||
' l_row '||p_tname||'%rowtype ;' ||
'....' ;
execute immediate v_dy_sql_block ;
end;
呃,一个输入变量,一个输出变量不就结了
create or replace function Fun_Multiplicative(v_input in number) return number is
v_result number(8);
v_total number(8) :=1;
v_count number(5) :=1;
begin
while v_count = v_input loop
v_total := v_total * v_count;
v_count := v_count + 1;
end loop;
v_result := v_total;
return(v_result);
end Fun_Multiplicative;
先说一下你的问题,declare在oracle中指代的是“块”,用于处理一段业务逻辑的。\x0d\x0a声明块中的变量,只需要在块里面的最前面输入声明即可。\x0d\x0a示例:\x0d\x0adeclare\x0d\x0a //这两个声明是声明了一个游标\x0d\x0a type cursor_type is ref cursor;\x0d\x0a cursor_deptno cursor_type;\x0d\x0a //这下面2个变量的声明,使用的是emps表下面的sal或ename字段的类型,你也可以直接定义\x0d\x0a v_sal emps.sal%type;\x0d\x0a v_name emps.ename%type;\x0d\x0a //你也可以这样,直接赋值,当然了,oracle里的赋值是需要使用“:=”,只用“=”报错\x0d\x0a i number :=0;\x0d\x0a\x0d\x0abegin\x0d\x0a open cursor_deptno for select ename,sal into v_name,v_sal from emps\x0d\x0a where deptno = input deptno;\x0d\x0a\x0d\x0a loop fetch cursor_deptno into v_name,v_sal; -- 循环体\x0d\x0a\x0d\x0a if v_sal
回答于 2022-12-14