【发布时间】:2016-07-05 18:35:06
【问题描述】:
我正在尝试将表名和列名传递给 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;
【问题讨论】:
-
这有什么令人困惑的地方?该表不存在。
-
我的意思是我已经有桌子了。
-
除非您试图混淆帖子中的数据库列名,否则 where 子句没有意义。
-
@GordonLinoff - 表可能存在,但调用者与定义者的权限可能会干扰表的可见性。
-
好吧,我需要过滤它,我将把这个想法用于其他目的,例如更新声明
标签: sql oracle plsql execute-immediate dbms-output