如何在oracle中的變數中傳遞多個字串值?這就是我正在嘗試的,但這沒有任何回報。
SET DEFINE ON;
DEFINE column_name ='"column_1","column_2","column_3","column_4","column_5"';
SELECT * FROM SYS.all_tab_columns WHERE column_name in ('&column_name');
對于變數中的一個值,它作業正常,但如何傳遞多個字串值?我在這里看到的所有例子都沒有幫助我
uj5u.com熱心網友回復:
這是一個選項(如果必須是DEFINE):
SQL> define column_name = 'EMPNO,DEPTNO'
SQL> select table_name, column_name from user_tab_columns where column_name in
2 (select regexp_substr('&&column_name', '[^,] ', 1, level) from dual
3 connect by level <= regexp_count('&&column_name', ',') 1
4 );
TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------
EMP EMPNO
DEPT DEPTNO
EMP DEPTNO
SQL>
雖然,為什么要打擾?簡單有什么不好
SQL> select table_name, column_name from user_tab_columns where column_name in ('EMPNO', 'DEPTNO');
TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------
DEPT DEPTNO
EMP EMPNO
EMP DEPTNO
SQL>
uj5u.com熱心網友回復:
你有:
- 替換變數中的錯誤引號;和
- 如果替換變數的替換文本中存在引號,則不需要查詢中替換變數的引號。
像這樣:
SET DEFINE ON;
DEFINE column_name='column_1','column_2','column_3','column_4','column_5'
SELECT * FROM SYS.all_tab_columns WHERE column_name in (&column_name);
客戶端應用程式(即 SQL*Plus 或 SQL Developer,它們是支持此語法的少數客戶端中的一些)將有效地執行查找-替換并將其替換為您的命令&column_name中分配的字串。DEFINE
替換變數的檔案在這里。
uj5u.com熱心網友回復:
如果您正在尋找要添加到 IN 子句的程序列串列的動態性,那么這樣的東西可能很有用 - 想法是使用 LISTAGG。
select listagg('''column'||'_'||level||'''',',') as column_list from dual connect by level<5;
COLUMN_LIST
--------------------------------------------------------------------------------
'column_1','column_2','column_3','column_4'
在您的 IN 查詢中使用上面生成的列串列。
否則,如果您只關心 all_tab_columns,那么您最好指定列名,如@Littlefoot 所述。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455854.html
