EXECUTE 过程 - 运行已解析 SQL 语句
EXECUTE 函数执行已解析 SQL 语句。
语法
参数
- c
- 类型为 INTEGER 的输入自变量,用于指定要执行的已解析 SQL 语句的游标标识。
- ret
- 类型为 INTEGER 的输出自变量,如果 SQL 命令为 DELETE、INSERT 或 UPDATE,那么此自变量返回处理的行数;否则返回 0。
权限
对 DBMS_SQL 模块的 EXECUTE 特权。
使用说明
可通过在 PL/SQL 赋值语句中使用函数调用语法来调用此过程。
示例
示例 1:以下匿名块在“DEPT”表中插入一行。
SET SERVEROUTPUT ON@
CREATE TABLE dept (
deptno DECIMAL(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR(14) NOT NULL,
loc VARCHAR(13),
CONSTRAINT dept_dname_uq UNIQUE( deptno, dname )
)@
BEGIN
DECLARE curid INTEGER;
DECLARE v_sql VARCHAR(50);
DECLARE v_status INTEGER;
CALL DBMS_SQL.OPEN_CURSOR(curid);
SET v_sql = 'INSERT INTO dept VALUES (50, ''HR'', ''LOS ANGELES'')';
CALL DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
CALL DBMS_SQL.EXECUTE(curid, v_status);
CALL DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);
CALL DBMS_SQL.CLOSE_CURSOR(curid);
END@此示例生成以下输出:
SET SERVEROUTPUT ON
DB20000I The SET SERVEROUTPUT command completed successfully.
CREATE TABLE dept
( deptno DECIMAL(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR(14) NOT NULL,
loc VARCHAR(13),
CONSTRAINT dept_dname_uq UNIQUE( deptno, dname ) )
DB20000I The SQL command completed successfully.
BEGIN
DECLARE curid INTEGER;
DECLARE v_sql VARCHAR(50);
DECLARE v_status INTEGER;
CALL DBMS_SQL.OPEN_CURSOR(curid);
SET v_sql = 'INSERT INTO dept VALUES (50, ''HR'', ''LOS ANGELES'')';
CALL DBMS_SQL.PARSE(curid, v_sql, DBMS_SQL.native);
CALL DBMS_SQL.EXECUTE(curid, v_status);
CALL DBMS_OUTPUT.PUT_LINE('Number of rows processed: ' || v_status);
CALL DBMS_SQL.CLOSE_CURSOR(curid);
END
DB20000I The SQL command completed successfully.
Number of rows processed: 1
