zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    __declspec(noinline)
    硬件遮挡查询
    #pragma pack(*) 与 __declspec(align(*))
    Interesting. 如何获取一个数组长度
    __declspec(novtable)
    如何将一个float的小数部分保存成RGBA4个8位的byte
    plain old C++ functions, base模板函数与特化的模板函数
    LeetCode 5: Longest Palindromic Substring
    LeetCode 335:Self Crossing 自交
    LeetCode 649:Dota2 Senate
  • 原文地址:https://www.cnblogs.com/jimeper/p/1159999.html
Copyright © 2011-2022 走看看