Oracle 动态sql中的Where子句
我正在尝试获取bank_id为01的所有表格。 我已经写了下面的代码块Oracle 动态sql中的Where子句,oracle,oracle12c,Oracle,Oracle12c,我正在尝试获取bank_id为01的所有表格。 我已经写了下面的代码块 DECLARE cursor cBankId is select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID'; v_table all_tab_columns.table_name%TYPE; vcount varchar2(50); BEGIN open
DECLARE
cursor cBankId is
select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID';
v_table all_tab_columns.table_name%TYPE;
vcount varchar2(50);
BEGIN
open cBankId;
loop
fetch cBankId into v_table;
exit when cBankId%notfound;
execute immediate 'select count(*) from ' || v_table into vcount || ' where bank_id = 01';
IF vcount > 0 THEN
DBMS_OUTPUT.PUT_LINE (v_table);
END IF;
end loop;
close cBankId;
END;
我想知道如何在executeimmediate语句中放入where子句。
我发现了错误
ORA-06550:第15行第67列:
PLS-00103:在预期以下情况时遇到符号|:
,%;返回使用您不能动态使用变量作为表名,而是使用:
DECLARE
cursor cBankId is
select owner||'.'||table_name from all_tab_columns where column_name = 'BANK_ID';
v_table all_tab_columns.table_name%TYPE;
vcount varchar2(50);
v_sql varchar2(1000);
BEGIN
open cBankId;
loop
fetch cBankId into v_table;
exit when cBankId%notfound;
v_sql := 'select count(*) from ' || v_table || ' into vcount where bank_id = 01';
execute immediate v_sql;
IF vcount > 0 THEN
DBMS_OUTPUT.PUT_LINE (v_table);
END IF;
end loop;
close cBankId;
END;
您只需更改编写查询部分的顺序。 当使用动态SQL时,您需要以下内容:
SQL> declare
2 v_table varchar2(30);
3 vCount number;
4 begin
5 v_table := 'dual';
6 execute immediate 'select count(*) from ' || v_table || ' where 1=1' into vcount;
7 --
8 dbms_output.put_line('vCount: ' || vCount);
9 end;
10
11 /
vCount: 1
PL/SQL procedure successfully completed.
即:立即执行“选择…”。。。从…起在哪里…'进入 可以使用变量作为表名。还有,这有用吗?