Oracle

將多個值傳遞給 Oracle 中的 sqlplus 腳本

  • January 13, 2022

我想執行相同的 sql 腳本,每次傳遞一個文本,但我不知道怎麼做。我想把它做成sqlplus。

有了這個選擇,我有了值,但我不知道如何傳遞這些值。

select column_value from table(sys.dbms_debug_vc2coll('Logons Per Sec', 'Executions Per Sec')))

LOOP 
  start script.sql column_name;
END LOOP;

我不明白你的例子。我曾嘗試使用,但它不起作用。我想將兩個值都傳遞給“prueba.sql”(每次執行一個)

cat prueba.sql
prompt &1;

SQL> COL column_value NEW_VALUE v_column_value
SQL> select column_value column_value from table(sys.dbms_debug_vc2coll('Logons Per Sec', 'Executions Per Sec'));

COLUMN_VALUE
--------------------------------------------
Logons Per Sec
Executions Per Sec

SQL> @prueba.sql &&v_column_value
Executions

我想每次在 prueba.sql 中執行一個報告,其中一個值作為參數。

謝謝

您可以COLUMN在 SQL*PLUS 中使用命令,如下所示。

SQL> COL column_value NEW_VALUE v_column_value
SQL> select column_name column_value from table(sys.dbms_debug_vc2coll('Logons Per Sec', 'Executions Per Sec')));

SQL> @"test.sql" &&v_column_value

文件: SQL*PLUS 中的列

我不知道 SQLPLUS 中可用的循環構造,因此您需要呼叫 prueba.sql 兩次 - 每個返回的參數一次。

COL column_value NEW_VALUE v_column_value

SELECT rn, column_value
 FROM (
select rownum as rn,column_value from table(sys.dbms_debug_vc2coll('Logons Per Sec', 'Executions Per Sec'))
order by column_value desc)
WHERE rn = 1
/

@prueba.sql '&v_column_value'

SELECT rn, column_value
 FROM (
select rownum as rn,column_value from table(sys.dbms_debug_vc2coll('Logons Per Sec', 'Executions Per Sec'))
order by column_value desc)
WHERE rn = 2
/

@prueba.sql '&v_column_value'

第一行設置了一個 SQLPLUS 屬性值,該屬性值由返回“column_value”的查詢填充。

查詢按名稱排序,但根據 ORDER BY 之後的 ROWNUM 選擇每個值。這應該確保兩個查詢以相同的順序返回記錄,但查看返回的單獨行。

‘v_column_value’ 參數的使用包含在單引號中,因為您嵌入了空格。

引用自:https://dba.stackexchange.com/questions/170530