【发布时间】:2017-08-20 10:35:19
【问题描述】:
如果我在 Oracle SQL 开发人员中运行它:
set serveroutput on
DECLARE
key_column varchar2(30) := 'Test';
BEGIN
dbms_output.put_line('key_col = ' || key_column );
SELECT cols.column_name INTO key_column
FROM all_constraints cons
INNER JOIN all_cons_columns cols ON cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
AND cons.constraint_type = 'P'
WHERE cons.owner = 'TAS'
AND cols.table_name = 'COMMENT_ALL_TXT';
DBMS_OUTPUT.PUT_LINE('1 key_column: ' || key_column);
END
;
输出是:
匿名块完成
key_col = 测试
1 key_column:COM_ALL_TXT_KEY
当我将相同的代码放入一个过程中时,输出如下:
ORA-01403:未找到数据
为什么程序代码在 SQL 工作表中运行时找不到约束?
这是程序代码:
create or replace PROCEDURE MMW1164.USP_BATCH_CLEANUP_NEW
IS
key_column VARCHAR2(100);
BEGIN
SELECT cols.column_name INTO key_column
FROM all_constraints cons
INNER JOIN all_cons_columns cols ON cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
AND cons.constraint_type = 'P'
WHERE cons.owner = 'TAS'
AND cols.table_name = 'COMMENT_ALL_TXT';
DBMS_OUTPUT.PUT_LINE('1 key_column: ' || key_column);
END
;
【问题讨论】:
-
如果我的问题有问题,请发表评论让我知道。给出没有评论的 -1 没有帮助。
-
不是dv,但请出示程序代码。您是否在同一架构中运行直接查询和存储过程?
-
感谢老程序员的推荐。我在同一个模式中运行直接查询和存储过程。
-
您运行存储过程的架构是否与“TAS”不同?
-
Possible duplicate 如果权限是来自角色。
标签: oracle variables stored-procedures