• EXECUTE IMMEDIATE Statement


    Syntax

    Text description of execute_immediate_statement.gif follows

    Keyword and Parameter Description

    bind_argument

    This can be an expression whose value is passed to the dynamic SQL statement or PL/SQL block, or it can be a variable that stores a value returned by the dynamic SQL statement or PL/SQL block.

    define_variable_name

    This identifies a variable that stores a selected column value.

    dynamic_string

    This is a string literal, variable, or expression that represents a SQL statement or PL/SQL block.

    INTO ...

    Used only for single-row queries, this clause specifies the variables or record into which column values are retrieved. For each value retrieved by the query, there must be a corresponding, type-compatible variable or field in the INTO clause.

    record_name

    This identifies a user-defined or %ROWTYPE record that stores a selected row.

    RETURNING INTO ...

    Used only for DML statements that have a RETURNING clause (without a BULK COLLECT clause), this clause specifies the bind variables into which column values are returned. For each value returned by the DML statement, there must be a corresponding, type-compatible variable in the RETURNING INTO clause.

    USING ...

    This clause specifies a list of input and/or output bind arguments. If you do not specify a parameter mode, it defaults to IN.

    Examples

    The following PL/SQL block contains several examples of dynamic SQL:

    DECLARE
       sql_stmt    VARCHAR2(200);
       plsql_block VARCHAR2(500);
       emp_id      NUMBER(4) := 7566;
       salary      NUMBER(7,2);
       dept_id     NUMBER(2) := 50;
       dept_name   VARCHAR2(14) := 'PERSONNEL';
       location    VARCHAR2(13) := 'DALLAS';
       emp_rec     emp%ROWTYPE;
    BEGIN
       EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';
    
       sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
       EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;
    
       sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
       EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;
    
       plsql_block := 'BEGIN emp_pkg.raise_salary(:id, :amt); END;';
       EXECUTE IMMEDIATE plsql_block USING 7788, 500;
    
       sql_stmt := 'UPDATE emp SET sal = 2000 WHERE empno = :1
          RETURNING sal INTO :2';
       EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary;
    
       EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num'
          USING dept_id;
    
       EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE';
    END;
    
  • 相关阅读:
    Vue单页面应用
    MVVM模式理解
    Ajax原生四大步骤
    Vue 全家桶介绍
    原生js的dom操作
    vs2015+opencv3.3.1+ maxflow-v3.01 c++实现Yuri Boykov 的Interactive Graph Cuts
    c++迭代递归实现汉诺塔(5种迭代方法满足你)
    opencv3.3.1+vs2015+c++实现直接在图像上画掩码,保存掩码图片
    声明函数指针、回调函数、函数对象------c++程序设计基础、编程抽象与算法策略
    C++/C语言的标准库函数与运算符的区别new/delete malloc/free
  • 原文地址:https://www.cnblogs.com/jimeper/p/1159999.html
Copyright © 2020-2023  润新知