oracle中in和out用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中in和out用法相关的知识,希望对你有一定的参考价值。

参考技术A oracle过程中定义了in、out、inout三种参数模式,每个参数可以选择其一。

1、in是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变;

2、out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用的过程;

3、inout模式表示高参数可以向该过程中传递值,也可将某个值传出去。

如何在oracle存储过程中执行动态sql语句

给你一个案例对这些,使用execute immediate就可以了,存储过程和语句块也是一样的,自己改一改,没区别的。

语法格式
EXECUTE IMMEDIATE dynamic_string
  [INTO define_variable[, define_variable]... | record]
  [USING [IN | OUT | IN OUT] bind_argument [, [IN | OUT | IN OUT] bind_argument]...]
  [RETURNING | RETURN INTO bind_argument[, bind_argument]...];
  
1, 操作 DDL语句,这也是动态 SQL的常用操作之一
如下所示使用动态 SQL创建 数据库表:
DECLARE
  l_dync_sql VARCHAR2(100);
BEGIN
  l_dync_sql := \'CREATE TABLE cux_dync_test(id NUMBER, creation_date DATE)\';
  EXECUTE IMMEDIATE l_dync_sql;
END;
2,操作 DML语句,使用 USING子句可以按照顺序将输入的值绑定到变量,如果动 态SQL只有单行输出的话可以直接使用 INTO来接收输出值,如下所示。
DECLARE
  l_dync_sql    VARCHAR2(100);
  l_person_name VARCHAR2(140);
  l_age         NUMBER;
BEGIN
  l_dync_sql := \'SELECT person_name, age FROM cux_cursor_test WHERE person_id = :1\';
  EXECUTE IMMEDIATE l_dync_sql
    INTO l_person_name, l_age -- 使用into语句接手动态SQL的输出,如果输出多行则出错
    USING 101; -- 给绑定变量赋值
  dbms_output.put_line(\'Person Name: \' || l_person_name);
  dbms_output.put_line(\'Age: \' || l_age);
END;
参考技术A CREATE OR REPLACE Procedure UP_ExecSqlProcForDS(strSql In Varchar2,cur_out Out sys_refcursor)AsBeginOpen cur_out ForstrSql;End;

以上是关于oracle中in和out用法的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中“IN”和“IN OUT”CURSOR参数的区别

Oracle 存储过程中OUT参数的用法

索引处缺少 IN 或 OUT 参数:: Java、Oracle 中的 1 个错误

如何在oracle存储过程中执行动态sql语句

Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]

使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle