這個任務有想到的兩個選項:獲取庫行的所有文件的數量與SQL
選項1:簡單明瞭的方式
- 執行
select table_name from qsys2.systables where table_schema = 'LIBRARY'
- 對於輸出的每個條目執行
select count(*) from LIBRARY.TABLENAME
- 保存結果並重復步驟2
選項2:動態SQL語句
- 嘗試包script結果爲
begin
和隨後execute immediate sql; end;
聲明。
不幸的是,在這段代碼with
條款不能與begin
使用,我不知道如何改寫整個腳本正常離不開它。
有人能拿出解決方案,性能比選項1中所述的更好嗎?
所需的輸出格式:
╔════════════╦═══════╗
║ TABLE_NAME ║ COUNT ║
╠════════════╬═══════╣
║ a1 ║ 432 ║
║ a2 ║ 9 ║
║ a3 ║ 0 ║
╚════════════╩═══════╝
UPD
基於答案我已經來到這個程序腳本,它不能正常工作,但是:
CREATE PROCEDURE LIB/CNT
LANGUAGE SQL
BEGIN
CREATE TYPE CHARARRAY AS VARCHAR(10) ARRAY[500];
DECLARE NAMES CHARARRAY;
DECLARE i INTEGER;
SET i = 1;
SET names = ARRAY[SELECT table_name FROM qsys2.systables WHERE
table_schema = 'LIBRARY'];
SET numNames = CARDINALITY(names);
WHILE i <= numNames
SET stmt = 'SELECT ' || names[i] || ' AS TABLE_NAME,
COUNT(*) FROM ' || names[i];
PREPARE s1 FROM stmt;
EXECUTE s1;
END WHILE;
END;
錯誤消息:Token NAMES was not valid. Valid tokens: GLOBAL.
添加global
名字給人Token NAMES was not valid. Valid tokens: TEMPORARY.
謝謝,夥計,就是這樣。我已經更新了你的答案,以便更準確(添加'qsys2',刪除redudant列) –
@im_infamous他們可能對你而言是多餘的,但不是下一個人。我將它們包括在內,以便您能夠看到並搜索事物的長SQL名稱。 – Charles