【问题标题】:executing a stored proc with output parameter使用输出参数执行存储过程
【发布时间】:2015-06-09 21:46:55
【问题描述】:

我正在使用 SQLDEVELOPER 创建一个存储过程。这是我的程序

create or replace PROCEDURE SPP
(
 inpt IN VARCHAR2,
 opt OUT VARCHAR2
)
AS
BEGIN
  SELECT U_ID 
    INTO opt 
    FROM TABLE_NAME 
   WHERE U_ID=inpt;
END;

所以它应该返回 opt 中的值,然后我可以打印或其他任何内容。 我不知道如何执行它我尝试运行这个脚本

var opt VARCHAR2;

exec SPP('test_user') := opt 

但它不起作用这是我第一次做存储过程,我真的很困惑任何帮助表示赞赏

如何让它运行?我可以使用输入变量运行存储的过程,但使用输出变量我搞砸了,如果不使用 SELECT (item) INTO 格式,我就无法做到这一点。

【问题讨论】:

    标签: sql stored-procedures oracle-sqldeveloper


    【解决方案1】:

    为了调用该过程,您需要传入一个该过程可以填充的变量。类似的东西

    DECLARE
      l_output table_name.u_id%type;
    BEGIN
      spp( 'test_user', l_output );
    END;
    

    话虽如此,声明一个存储过程,其唯一目的是查询数据库并返回一个值通常是错误的架构选择。这就是函数存在的原因。

    CREATE OR REPLACE FUNCTION some_function( p_input IN table_name.u_id%type )
      RETURN table_name.u_id%type
    IS
      l_uid table_name.u_id%type;
    BEGIN
      SELECT u_id
        INTO l_uid
        FROM table_name
       WHERE u_id = p_input;
    
      RETURN l_uid;
    END;
    

    然后您可以在 PL/SQL 块中调用它

    DECLARE
      l_output table_name.u_id%type;
    BEGIN
      l_output := some_function( 'test_user' );
    END;
    

    或在 SQL 语句中

    SELECT some_function( 'test_user' )
      FROM dual;
    

    【讨论】:

    • 感谢您的提示,我只是在没有太多曝光的情况下被扔进数据库中,所以我很欣赏 cmets。非常感谢!
    • 另外,我将如何打印 l_output 变量?只是为了验证我所做的是否正确?非常感谢!
    • @user4992422 - 来自 PL/SQL 块,dbms_output.put_line( l_output );。不过,您必须配置您的客户端以显示该输出。在 SQL*Plus 中,您将在运行块之前运行 set serveroutput on。在大多数 PL/SQL IDE(Toad、SQL Developer 等)中,您需要启用一个 DBMS 输出选项卡/窗格/窗口。
    • 再次非常感谢!
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2019-09-26
    • 2016-03-24
    相关资源
    最近更新 更多