1

我正在尝试将表名和列名传递给 oracle 中的存储过程,但它给了我以下错误:table or view does not exist

下面是代码:

create or replace procedure jz_dynamic_sql_statement
    (p_table_name    in varchar2,
     p_col1_name     in varchar2,
     p_check_result  out integer)

  as

    v_error_cd          est_runtime_error_log.error_cd%type;
    v_error_msg         est_runtime_error_log.error_msg%type;
    v_sql               varchar2(1024);
    v_result            number(10);

  begin
    v_result    := 0;
    v_sql       := 'select  count(*)  from ' || p_table_name ||' WHERE COLUMNNAME=' || p_col1_name;


    execute immediate v_sql into v_result;
    p_check_result := v_result;

  end;
4

1 回答 1

2

如果返回的错误表明该表不存在,那么这意味着您传入的表不存在或运行该过程的用户无法访问它。

您可以添加一个 dbms_output.put_line 语句来显示您正在构建的查询,然后尝试自己运行它,然后再尝试立即执行。然后你知道你需要修复哪些错误。

dbms_output.put_line('query : '||v_sql);

请务必打开 dbms_output。

此外,从您尝试执行的操作来看,您将需要传递列名和列值。除非您要查询的表总是具有列名“COLUMNNAME”。

尝试这个:

v_sql       := 'select  count(*)  from ' || p_table_name ||' WHERE COLUMNNAME=''' || p_col1_name|| '''';
于 2016-03-18T21:00:07.420 回答