Получение LOCATE для возврата к переменной SQL DB2 - PullRequest
0 голосов
/ 15 ноября 2018

возможно ли использовать

 CREATE PROCEDURE TEST(IN QUERYSTRING VARCHAR(128))
 LANGUAGE SQL
 BEGIN
 DECLARE switch integer default 0;
 set switch = LOCATE('select', querystring,1);
 IF switch <> 0 then
 .......
 ELSE
 .......
 END IF;
 END@

Строка запроса может быть 'select count (*) from testtag' ИЛИ ​​'вставить в testtab'

Любые идеи, если я смогу сделать это икак получить возвращаемое значение LOCATE в переменную?

Windows DB2 10.5

Спасибо

1 Ответ

0 голосов
/ 15 ноября 2018

Вот пример, сравните его вывод в вашей среде:

--#SET TERMINATOR @
set serveroutput on@
update command options using s on@

CREATE or replace PROCEDURE locateTEST(IN QUERYSTRING VARCHAR(128))
 LANGUAGE SQL
 specific locatetest
 BEGIN
     DECLARE switch integer default 0;
     set switch = LOCATE('select', querystring,1);
     IF switch <> 0 then
       call dbms_output.put_line('Switch: '||varchar(switch));
    ELSE
       call dbms_output.put_line('Switch: 0');
    END IF;
END@

call locatetest('    insert into fred(mycol) values(1)')@
call locatetest('    select count(*) from testtag')@

Приведенный выше вывод дает следующий вывод при выполнении из командной строки Db2 (например, в окнах из окна db2cmd.exe с ужесуществующее соединение с базой данных):

set serveroutput on
DB20000I  The SET SERVEROUTPUT command completed successfully.

update command options using s on
DB20000I  The UPDATE COMMAND OPTIONS command completed successfully.

CREATE or replace PROCEDURE locateTEST(IN QUERYSTRING VARCHAR(128))
 LANGUAGE SQL
 specific locatetest
 BEGIN
     DECLARE switch integer default 0;
     set switch = LOCATE('select', querystring,1);
     IF switch <> 0 then
       call dbms_output.put_line('Switch: '||varchar(switch));
    ELSE
       call dbms_output.put_line('Switch: 0');
    END IF;
END
DB20000I  The SQL command completed successfully.

call locatetest('    insert into fred(mycol) values(1)')

  Return Status = 0

Switch: 0

call locatetest('    select count(*) from testtag')

  Return Status = 0

Switch: 5
...