在过程中选择INTO变量

时间:2017-03-27 15:58:48

标签: oracle variables stored-procedures

如果我在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 个答案:

答案 0 :(得分:1)

如果从同一模式运行该过程,则不应出错。
请检查附带的屏幕截图。我只是复制了你的场景。
请与我的交叉核对您的代码。谢谢。 enter image description here

  

确保您的架构名称正确。我的意思是,你在同一架构下检查两者。那么结果会是一样的。