Skip to content

BIND_VARIABLE

接口/方法功能

将给定的数量与特定的变量相连接,定义动态SQL语句(DML)中所对应字段的值。

接口/方法声明

DBMS_SQL.BIND_VARIABLE(CURID in INTEGER, FIELD in VARCHAR, VAR_DEF);

参数说明

参数名称参数类型参数解释默认值
CURIDINTEGER动态游标整型ID值,= DBMS_SQL.OPEN_CURSOR
FIELDVARCHAR绑定变量名称
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;