我是 pl/sql 的新手。我需要根據給定的行 ID 檢索一行。為此,我撰寫了一個回傳行的函式。這是我寫的函式。
CREATE OR REPLACE FUNCTION CHECKROW(ROW_ID_ IN VARCHAR2)
RETURN TBL_SPT%ROWTYPE
IS
VAR_TEMP_ TBL_SPT%ROWTYPE;
CURSOR GET_ROW IS
SELECT *
FROM TBL_SPT
WHERE ROWID = ROW_ID_;
BEGIN
OPEN GET_ROW;
FETCH GET_ROW
INTO VAR_TEMP_;
--Here I wrote the print statement to get the id only.
DBMS_OUTPUT.PUT_LINE(VAR_TEMP_.s_id);
RETURN VAR_TEMP_;
CLOSE GET_ROW;
END CHECKROW;
但是當我測驗這個函式時,它給出了以下錯誤。我的第一個問題是為什么這個函式會給出這個錯誤?我在這里使用了游標。這是錯的嗎?我應該使用記錄嗎?另一個問題是,如果我想列印記錄,我應該對所有欄位使用“VAR_TEMP_.id”型別嗎?還有其他方法嗎?

這是我的表定義。
Name Type
----------- ------
S_ID NUMBER
P_ID NUMBER
PR_ID NUMBER
QUANTITY NUMBER
ROW_VERSION DATE
這是測驗時產生的呼叫函式。row_id_是一個字串。
declare
-- Non-scalar parameters require additional processing
result record;
begin
-- Call the function
result := checkrow(row_id_ => :row_id_);
end;
uj5u.com熱心網友回復:
錯誤來自您呼叫函式的匿名塊,而不是來自函式本身;它并沒有真正打出那個電話。
宣告:
result record;
應該:
result TBL_SPT%ROWTYPE;
匹配函式的回傳型別。看起來樣板代碼使用了一個通用的“記錄”,它希望您定義或替換它。正如它在評論中所說,“非標量引數需要額外的處理”。
如評論中所述,這并不意味著您的功能沒有問題;但那些并沒有導致這個錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414325.html
標籤:
上一篇:將Sum(x)Keep(Dense_RankLastOrderbyy)從oracle轉換為具有限制因子的BigQuery
下一篇:使用select陳述句更新記錄
