簡體   English   中英

游標選擇語句中的變量

[英]Variable in cursor select statement

我試圖使用PLSQL來獲取多個表的計數,其中有4個表-測試,測試1,測試2,測試3。

表測試包含我需要計數的所有表的詳細信息,並且正在使用下面的程序使用游標來實現相同目的。

declare
var varchar2(20);
var2 varchar2(20);
cursor C1 is select tab_name from testing;
begin
open C1;
loop
fetch C1 into var;
exit when C1%notfound;
select count(*) into var2 from var;
dbms_output.put_line(var2);
end loop;
end;
/

但是執行以下錯誤:

select count(*) into var2 from var;
                               *
ERROR at line 10:
ORA-06550: line 10, column 32:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 10, column 1:
PL/SQL: SQL Statement ignored

您必須對dynamic sql使用execute immediate

declare
    var varchar2(50);
    var2 number;
    cursor C1 is select tab_name from testing;
begin
    open C1;
    loop
        fetch C1 into var;
        exit when C1%notfound;
        execute immediate 'select count(*) from ' || var into var2;
        dbms_output.put_line(var2);
    end loop;
end;
/

您可以像使用Implicit Cursors

declare
    var number;
begin
    for i in (select tab_name from testing) loop
        execute immediate 'select count(*) from ' || i.tab_name into var;
        dbms_output.put_line(var);
    end loop;
end;
/
set serveroutput on;
declare
var varchar2(20);
var2 varchar2(20);
cursor c is select field1 from testing;
begin
for c1 in c
loop
var2:=c1.field1;
execute immediate 'select count(*) from ' || var2 into var;
-- below query won't work as we are creating a dynamic SQL statement
 --select count(*) into var from var2;
dbms_output.put_line(var);
end loop;
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM