BIND_VARIABLE
接口/方法功能
将给定的数量与特定的变量相连接,定义动态SQL语句(DML)中所对应字段的值。
接口/方法声明
DBMS_SQL.BIND_VARIABLE(CURID in INTEGER, FIELD in VARCHAR, VAR_DEF);
参数说明
参数名称 | 参数类型 | 参数解释 | 默认值 |
---|---|---|---|
CURID | INTEGER | 动态游标整型ID值,= DBMS_SQL.OPEN_CURSOR | 无 |
FIELD | VARCHAR | 绑定变量名称 | 无 |
VAR_DEF | 多数据类型 | 绑定变量传入变量值,支持基础数据类型、集合、记录、数组等数据类型 | 无 |
操作示例
创建基础表,并初始部分数据
CREATE TABLE CUX_DEMO (A NUMBER,B NUMBER,C NUMBER);
插入数据
BEGIN FOR i IN 1 .. 15 LOOP INSERT INTO CUX_DEMO VALUES (i*2+1 * 100, i*2+1 * 100, i*2+1 * 100); END LOOP; COMMIT; END;
使用DBMS_SQL包绑定变量
DECLARE P_NO NUMBER := 80; CURSOR_NAME INTEGER := DBMS_SQL.OPEN_CURSOR; --在初始化参数时,就可以打开CURSOR; ROW_PROCESS INTEGER; V_B NUMBER; BEGIN --解析要执行的SQL. DBMS_SQL.PARSE(CURSOR_NAME, 'SELECT * FROM CUX_DEMO WHERE A= :NO', DBMS_SQL.NATIVE); --如果要执行的SQL中不需要参数,则可以省略掉BIND_VARIABLE-- DBMS_SQL.BIND_VARIABLE(CURSOR_NAME, 'NO', P_NO); --如果需要返回查询语句的结果,则必须在EXEC之前使用DEFINE_COLUMN函数定义返回字段; --DEFINE_COLUMN函数的第一个参数是最初定义的CURSOR NAME, --第二个参数是指需要返回的字段在查询结果中处于第几列,在此例中返回的字段是查询结果中的第二列,即B列; --第三个参数就是接收返回结果需要的变量*/ DBMS_SQL.DEFINE_COLUMN(CURSOR_NAME, 2, V_B); --必须定义一个参数接收EXEC的结果 ROW_PROCESS := DBMS_SQL.EXECUTE(CURSOR_NAME); LOOP IF DBMS_SQL.FETCH_ROWS(CURSOR_NAME) > 0 THEN --将前面定义的字段返回给变量V_B-- DBMS_SQL.COLUMN_VALUE(CURSOR_NAME, 2, V_B); DBMS_OUTPUT.PUT_LINE('B IS ' || V_B); ELSE EXIT; END IF; END LOOP; --数据处理完成后记得要将CURSOR关闭 DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME); EXCEPTION WHEN OTHERS THEN IF DBMS_SQL.IS_OPEN(CURSOR_NAME) THEN DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME); END IF; END;