簡體   English   中英

PL / SQL合並可變值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM