[英]PL/SQL coalesce on variable value
我正在研究一種從多個表中選擇一些數據的存儲過程。 有些表還沒有准備好從表中提取數據,所以我認為我可以使用合並並將一些參數傳遞到存儲過程中,從哪里獲取數據,實際上使用null直到數據准備好為止。
PROCEDURE SP (frst_name VARCHAR2 default null)
AS
BEGIN
SELECT
coalesce(frst_name, oldTable.frst_name)
FROM
oldTable left join newTable on oldTable.Id = newTable.Id
END SP;
這是存儲過程的簡化版本。 有什么辦法可以使它正常工作嗎?
當我嘗試編譯存儲的proc時,出現錯誤(37,4):PL / SQL:SQL語句被忽略。
更新
我忘了提到我在聯接中使用別名,導致我認為問題可能實際上出在第二個合並參數,而不是我要傳入的變量。我注意到這兩個別名上有一個警告,說“新”與聯接圖的其余部分斷開連接
PROCEDURE SP (frst_name VARCHAR2 default null)
AS
BEGIN
SELECT
coalesce(frst_name, oldTable.frst_name)
FROM
oldTable old left join newTable new on oldTable.Id = newTable.Id
END SP;
我已經通過將frst_name變量切換為null並仍然得到相同的錯誤來確認這一點,你們知道發生了什么嗎?
解決了
謝謝大家,但這是一個愚蠢的錯誤,我在存儲過程中使用了另一個數據庫用戶,但是我沒有設置同義詞或授予用戶訪問權限-_-經驗教訓!
我們不使用in,並且在PL SQL select中不允許這樣做。.您也可以更好地使用NVL或解碼來進行這種簡單的測試..合並主要用於選擇第一個非null值,
任何方式..這是正確的語法:
create or replace PROCEDURE sp(frst_name VARCHAR2 default null)
AS
v number;
BEGIN
SELECT
coalesce(oldTable.frst_name,frst_name)
into v
FROM
oldTable left join newTable
on oldTable.ID = newTable.ID;
END sp;
還可以使用SQL Developer獲得更多聲明性錯誤消息,它是免費的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.