Динамический SQL не сложно ...
По сути, встроите оператор SQL в строковую переменную. Использование CONCAT
для включения значений из других
@sqlStmt = 'Insert into mytable values (''ConstVal'',' concat SomeVar concat ')';
execute immediate @sqlStmt;
Проблема в том, что вам нужно экранировать строки, например 'ConstVal' выше, с двойными одинарными кавычками.
Другой улов в том, что вы не можете использовать SELECT
, как пытаетесь. Если бы у вас была только одна строка для возврата, SELECT INTO
была бы опцией для статического оператора. Но не поддерживается для динамического. Вместо этого вы должны использовать динамический VALUES INTO
.
Однако, похоже, вы хотите вернуть несколько строк. В этом случае вам нужно использовать курсор. К сожалению, динамические курсоры немного сложнее, так как вы должны использовать дескриптор SQL.
declare myCursor cursor for myStatement;
set @sqlStmt = 'select ....';
prepare myStatement into mySqlDescriptor from @SqlStmt;
open myCursor;
// done if you are returning the results
// assuming you want to process in your procedure..
// add a loop that does
// fetch next from myCursor into myData;
Сказав все это, вам не нужно ничего, чтобы получить счетчик строк для таблицы ... представление каталога syspartitionstat уже имеет эту информацию.
select table_name, number_rows
from syspartitionstat
where table_schema = 'ABCDEFGH'
and TABLE_NAME in ('ARCMNTST', 'ARIMSGT', 'ARTENT', 'ETC', 'ETC', 'ETC');