执行生成的sql语句(输出)

问题描述 投票:0回答:2

我想执行查询A,但我想使用查询B执行查询A.实现此目的的一种方法是将查询B的结果假脱机到sql文件并运行。我更愿意使用PL / SQL完成此任务。

- 查询A.

delete from
tableA
where
id=4;

- 查询B.

select 'delete from' as test from dual
union all
select 'tableA' as test from dual
union all
select 'where' as test from dual
union all
select 'id=4'||';' as test from dual 
sql oracle plsql
2个回答
1
投票

您可以尝试loop查询B的语句,并在最后应用execute immediate

SQL> set serveroutput on;
SQL> declare
  v_sql varchar2(4000);
begin

  for c in ( select 'delete from ' as test from dual
              union all
              select 'tableA ' as test from dual
              union all
              select 'where ' as test from dual
              union all
              select 'id=4' as test from dual )   
  loop
    v_sql := v_sql || c.test;
  end loop;            
    dbms_output.put_line(v_sql);
    execute immediate v_sql;
end;
/

0
投票

就像是 ...

begin
  execute immediate 'delete from ta where id = ' || 4 ; 
end;
/

或者,如果要使用过程:

create or replace procedure delete_row ( row_ number )
as
begin
  execute immediate 'delete from ta where id = ' || row_ ; 
end;
/

begin
  delete_row( 4 );
end;
/

Dbfiddle here

© www.soinside.com 2019 - 2024. All rights reserved.