• T100——存储过程的调用


    来自Genero Studio Help

    带有输出参数的存储过程

    必须使用EXECUTE、OPEN或FOREACH指令的USING子句中的输入和输出参数规范调用Oracle存储过程或存储函数。在正常的动态SQL中,参数必须按位置对应,in /OUT/INOUT选项必须与存储过程的参数定义匹配。

     

    要执行存储过程,必须将过程包含在一个匿名PL/SQL块中,并带有开始和结束关键字:

    从“begin proc1(?,?,?)”准备stmt;结束;“

    注:Oracle存储过程不指定数字大小和字符参数。输出值(特别是字符串)的大小由调用上下文(即调用过程时使用的变量的数据类型)定义。当您向过程传递一个CHAR(10)时,返回的值将被填入空格,以达到10个字节的大小。

     

    注意,由于技术原因,Oracle驱动程序使用了与OCIBindDynamic()的动态绑定。在使用动态绑定时,Oracle Call接口不支持CHAR数据类型的存储过程参数。必须使用VARCHAR2而不是CHAR来定义存储过程的字符串参数。

     

    下面是一个创建和调用带有输出参数的存储过程的完整示例(Oracle):

    MAIN
       DEFINE n INTEGER
       DEFINE d DECIMAL(6,2)
       DEFINE c VARCHAR(200)
       DATABASE test1
       EXECUTE IMMEDIATE
                       "create procedure proc1("
                    || "         p1 in int,"
                    || "         p2 in out number,"
                    || "         p3 in out varchar2"
                    || "      )"
                    || " is begin"
                    || "  p2:= p1 + 0.23;"
                    || "  p3:= 'Value = ' || to_char(p1);"
                    || "end;"
       PREPARE stmt FROM "begin proc1(?,?,?); end;"
       LET n = 111
       EXECUTE stmt USING n IN, d INOUT, c INOUT
       DISPLAY d
       DISPLAY c
    END MAIN

    MS SQL:

    PREPARE stmt FROM "{ call proc1(?,?,?) }"
    MAIN
       DEFINE n INTEGER
       DEFINE d DECIMAL(6,2)
       DEFINE c VARCHAR(200)
       DATABASE test1
       EXECUTE IMMEDIATE
                       "create procedure proc1"
                    || "             @v1 integer,"
                    || "             @v2 decimal(6,2) output,"
                    || "             @v3 varchar(20) output"
                    || " as begin"
                    || "  set @v2 = @v1 + 0.23"
                    || "  set @v3 = 'Value = ' || cast(@v1 as varchar)"
                    || "end"
       PREPARE stmt FROM "{ call proc1(?,?,?) }"
       LET n = 111
       EXECUTE stmt USING n IN, d OUT, c OUT
       DISPLAY d
       DISPLAY c
    END MAIN
  • 相关阅读:
    ID,ClientID,UniqueID的区别
    Struct构造函数
    关于sizeof,typeof
    C#文件读写
    code1
    .NET中加密与解密QueryString的方法
    addEventListener和attachEvent的区别
    执行带参数的存储过程
    如何得到机器上装的Powershell的版本
    [Gradle] How to determine OS info
  • 原文地址:https://www.cnblogs.com/xiaoli9627/p/13517905.html
Copyright © 2020-2023  润新知