У меня вот это:
create procedure test_ins(IN tab varchar(128))
Language sql
begin
DECLARE stmt_ins STATEMENT;
DECLARE v_query varchar(2048);
DECLARE test varchar(20);
DECLARE test_tab varchar(20);
set test = 'HERE IT IS';
set test_tab = tab;
set v_query= 'INSERT INTO '||test_tab||'(test, free) values (test,'''')';
PREPARE stmt_ins from v_query;
EXECUTE stmt_ins;
end@
Проблема в том, что кажется, что он запускается (нет сообщения об ошибке), но в таблице ничего нет ....
Любые идеи? Спасибо
Или, если мой комментарий выше не работает: установите v_query = 'INSERT INTO' || test_tab || '(test, free) values (' 'test' ',' '' ')';
оба не работают
ну, по крайней мере, мы устранили потенциальную проблему в будущем. Вы также можете попробовать "EXEC SQL EXECUTE stmt_ins" в конце?
Также попробуйте: EXEC SQL EXECUTE IMMEDIATE: stmt_ins;
О, нашел, мы забываем одинарные кавычки, должно быть как «Вот оно», то есть «» '|| test ||' ''. Обновил мой ответ, проверьте это.


Кажется, вы не используете отладчик ... попробуйте тот, который есть в IBM Data Studio (бесплатный скачать).
create or replace procedure test_ins(IN tab varchar(128))
Language sql
specific test_ins
begin
DECLARE v_query varchar(2048);
DECLARE test varchar(20);
DECLARE test_tab varchar(20);
DECLARE stmt_ins STATEMENT;
set test = 'HERE IT IS';
set test_tab = tab;
set v_query= 'INSERT INTO '||test_tab||'(test, free) values (''test'','''')';
call dbms_output.put_line(v_query);
PREPARE stmt_ins from v_query;
EXECUTE stmt_ins;
end@
Отладчик не запускается (идентификатор пользователя не имеет прав) (я администратор на машине), однако он не работает. в журнале ничего нет и ошибок нет
Отладчик отлично работает для меня как локального администратора, поэтому у вас другая проблема, не связанная с вашим вопросом. Точный код, который я показываю в своем ответе, работает правильно. Ваш код может отличаться. Если приведенный выше точный код не дает ни вставки, ни ошибки, значит, вы опускаете некоторую информацию.
Когда я просто выполняю оператор напрямую, он работает с подготовкой, а выполнить его не
Работает ли точный код, показанный в моем ответе, в вашей среде? Вам не поможет, если вы измените вопрос внутри комментария!
Нет, к сожалению
Тогда вы упускаете важную информацию. Поскольку вы, кажется, изучаете sprocs, вам нужен либо отладчик, либо либеральное использование dbms_output.put_line для показывать того, что на самом деле выполняется.
печальная вещь, dbms_output не отображается в командной строке или в студии данных, он работает напрямую, поэтому я должен работать с этим, я думаю
Для работы из командной строки (db2cmd) требуется, чтобы dbms_output был запущен в командной строке db2 set serveroutput on перед вызовом sproc.
Наконец-то получил ... это '' '|| тест ||' '', '' ''
Я думаю, вам нужно изменить test на '|| test ||' в наборе v_query, как показано ниже:
create procedure test_ins(IN tab varchar(128))
Language sql
begin
DECLARE stmt_ins STATEMENT;
DECLARE v_query varchar(2048);
DECLARE test varchar(20);
DECLARE test_tab varchar(20);
set test = 'HERE IT IS';
set test_tab = tab;
set v_query= 'INSERT INTO '||test_tab||'(test, free) values ( '''||test||''','''')';
PREPARE stmt_ins from v_query;
EXECUTE stmt_ins;
end@
Можете ли вы попробовать: установить v_query = 'INSERT INTO' || test_tab || '(test, free) values (' || test || ',' '' ')';