Ошибка PLSQL DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE при использовании параметра переменной - PullRequest
0 голосов
/ 24 октября 2018

У меня есть dblink, подключенный к mysql под названием times.

У меня есть имя таблицы test_tblOOHA_Master с одной записью (см. Изображение ниже).

enter image description here

Мой код:

DECLARE 
    num_rows INTEGER;
    v_cursor   BINARY_INTEGER;
    nr INTEGER;

    -- BINDING VARIABLES            
    header_id INTEGER; 
    flow_status_code VARCHAR(500); 
    qry VARCHAR(5000) ;

PROCEDURE test 
AS
qry_select VARCHAR2(10000) := 'select
                t1.header_id 
                ,t1.flow_status_code 
            from  test_tblOOHA_Master t1;'; 
BEGIN
    v_cursor := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@times;
    DBMS_HS_PASSTHROUGH.PARSE@times(v_cursor,qry_select);
     WHILE DBMS_HS_PASSTHROUGH.FETCH_ROW@times(v_cursor) > 0
        LOOP 
        DBMS_HS_PASSTHROUGH.GET_VALUE@times(v_cursor,1,header_id); 
        DBMS_HS_PASSTHROUGH.GET_VALUE@times(v_cursor,2,flow_status_code); 

        qry  := 'UPDATE test_tblOOHA_Master  
                set  flow_status_code= "'|| flow_status_code ||'"
                where  header_id = '|| header_id ||' ;  ';

        dbms_output.put_line(qry);      
         /*
        qry variable generated the ff. string

        UPDATE test_tblOOHA_Master  
                set  flow_status_code= "TEST"
                where  header_id = 1603823 ;
       */

       num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@times (qry); -- When I stored the string to a variable, It throws and error

       num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@times (
                'UPDATE test_tblOOHA_Master  
                set  flow_status_code= "TEST"
                where  header_id = 1603823 ;'); -- But when I run the string directly, it works fine
    END LOOP;
  DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@times(v_cursor);
END test;

BEGIN
 test;
 COMMIT;
END;        
/

Когда я запускаю код, я получаю эту ошибку:

enter image description here

В этой части я получаю сообщение об ошибке:

 num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@times (qry); -- When I stored the string to a variable, It throws and error

Но при непосредственном запуске строки все работает нормально.

num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@times (
                'UPDATE test_tblOOHA_Master  
                set  flow_status_code= "TEST"
                where  header_id = 1603823 ;'); -- But when I run the string directly, it works fine

Резюме: При использовании переменной qry,Я получил ошибку.Но при использовании прямого строкового значения это работает.

Что не так с моей переменной?Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...