动态语句调用过程,传参rowtype类型

GG_wg 2014-10-23 10:54:38
动态语句调用过程,传参rowtype类型
如:

create or replace aaa(aa in scott.emp%rowtype) as
begin
dbms_output.put_line(aa.ename);
end;

调用:

declare
v_sql varchar2(2000);
begin
v_sql := 'begin'
v_sql := 如何调用?
v_sql := v_sql || ' end';
end;
...全文
451 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
绕天涯_2014 2015-02-02
  • 打赏
  • 举报
回复
rowtype可以理解为java中的对象,rowtype可以理解为把一个表的每一列做为对象的一个属性。调用的时候也可以使用“.”调用,这一点也是符合对象的属性的调用方式。按照这个方式理解rowtype可能好理解些
bw555 2014-10-27
  • 打赏
  • 举报
回复
我意思是把你整个过程的语句都动态传进来
execute immediate 
'declare
v_row_emp emp%rowtype;
begin
aaa(v_row_emp) 
end;';
这样传递的参数为varchar2类型,而不是rowtype类型
GG_wg 2014-10-27
  • 打赏
  • 举报
回复
引用 4 楼 bw555 的回复:
execute immediate 可以执行一个代码段的, 可以连同生成rowtype的代码一起传过来,动态执行传过来的代码段
execute immediate
'declare
 a table.column%rowtype;
begin
 
end;'
里面调过程你测试了吗?我测试后不行才来咨询的。

create or replace aaa(aa in scott.emp%rowtype) asbegindbms_output.put_line(aa.ename);end;

declare
v_sql varchar2(4000);
v_row_emp emp%rowtype;
begin
v_sql := 'begin aaa(:v1) end';
execute immediate v_sql using v_row_emp;
报参数类型不对
bw555 2014-10-26
  • 打赏
  • 举报
回复
execute immediate 可以执行一个代码段的, 可以连同生成rowtype的代码一起传过来,动态执行传过来的代码段
execute immediate
'declare
 a table.column%rowtype;
begin
 
end;'
GG_wg 2014-10-25
  • 打赏
  • 举报
回复
我这边具体是一个包里的多个过程,通过配置,在调度时通过读取配置来执行具体过程。一楼方式适合单一的,不适用批量的调用。 我想通过 动态的 begin end 来实现。现在也能实现,就是调用时每个过程传参太多,就是要传个对象,而不是具体的类型。 不知道dbms_sql里是否可以这么调用
bw555 2014-10-24
  • 打赏
  • 举报
回复
rowtype类型没办法转化为字符串的吧,使用动态语句调用貌似不行啊 正常调用,参考1楼的写法
CT_LXL 2014-10-23
  • 打赏
  • 举报
回复
引用 楼主 GG_wg 的回复:

create or replace procedure aaa(aa in scott.emp%rowtype) as
begin
dbms_output.put_line(aa.ename);
end;
/
set serveroutput on;

declare
begin
for c1 in (select * from scott.emp) loop
aaa(c1);
end loop;
end;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧