在COTS系統中,我可以輸入SQL WHERE 子句。
- 我知道從安全角度來看,用戶定義的 SQL WHERE 子句是一個有問題的設計選擇。話雖如此,我對該軟體的設計擁有零控制權。這不是安全問題。
有效的 WHERE 子句示例:
worktype = 'Corrective Maintenance'
或者
1 = (
with
cte as (select 1 as calc from dual)
select
calc
from
cte
)
同樣,我想知道是否可以在 WHERE 子句的子查詢中使用行內函式。
這個行內函式在 SQL 客戶端中獨立作業:
with
function inline_f(p_num number) return number is
begin
return p_num 0;
end;
select
inline_f(1) as calc
from
dual
Calc
----
1
但是如果我將它包裝在 WHERE 子句的子查詢中,那么我會得到一個錯誤(即使在 SQL 客戶端中):
--select * from a_tbl where
1 = (
with
function inline_f(p_num number) return number is
begin
return p_num 0;
end;
select
inline_f(1) as calc
from
dual
)
ORA-00921: unexpected end of SQL command
Invalid statement
ORA-00933: SQL command not properly ended
題:
有沒有辦法在子查詢中使用行內函式(在 WHERE 子句中)?
uj5u.com熱心網友回復:
有沒有辦法在子查詢中使用行內函式(在 WHERE 子句中)?
有,但我不確定這是否對你有幫助。我不知道什么是 COTS 系統,以及它是如何作業的。我了解用戶只能輸入一個WHERE子句;但是您(作為開發人員) - 或者開發人員是誰,如果不是您 - 可以訪問整個SELECT宣告?
如果您在WITH子句中定義函式的查詢不是頂級SELECT陳述句(在您的情況下不是),則頂級SELECT必須包含with_plsql提示。(無論如何,Oracle 稱其為“提示”;它使用提示語法,但它不是提示,它實際上是一個編譯器指令。)唉,這必須在頂級SELECT(意味著SELECT您的查詢的子句,它您的最終用戶無法訪問)。
這就是為什么我問...如果為您的用戶開發這些查詢的人不介意將with_plsql提示添加到 top-level SELECT,那么您可以按照您的要求進行操作。如果用戶在WHERE子句中輸入沒有 PL/SQL 代碼的WITH子句,提示不會有任何傷害,所以沒有理由不想這樣做;但是,就像我說的,我不知道 COTS 是什么意思或它是如何作業的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321340.html
標籤:甲骨文 子查询 with 语句 甲骨文19c 内联函数
下一篇:以字串格式顯示電影描述
