Oracle 动态sql中的Where子句

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

我正在尝试获取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 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.

即:立即执行“选择…”。。。从…起在哪里…'进入

可以使用变量作为表名。还有,这有用吗?