這是代碼:
CREATE PROCEDURE print_string(IN input_string VARCHAR(255))
BEGIN
DECLARE num_chars INT DEFAULT 0;
IF input_string IS NULL THEN
SET num_chars = 0;
ELSE
SET num_chars = CHAR_LENGTH(input_string);
END IF;
SELECT UPPER(input_string), num_chars;
END;
我得到錯誤:
PLS-00103: Encountered the symbol "IN" when expecting one of the following: <an identifier> <a double-quoted delimited-identifier>
current delete exists prior
Errors: check compiler log
我該如何解決:current delete exists prior?
uj5u.com熱心網友回復:
直接的錯誤是您的引數名稱和模式錯誤 - 它不(input_string IN ...應該(IN input_string ...。但還有其他問題:
- Oracle 建議
VARCHAR2超過VARCHAR. - 引數只有資料型別,而不是大小(或精度/比例),所以它不應該
(input_string IN VARCHAR2)是(input_string IN VARCHAR2(255). - 您缺少 IS/AS 關鍵字。
DECLAREBEGIN位于 PL/SQL 塊之前;在這里有一個嵌套塊是有效的,但是如果你這樣做,你就錯過了BEGIN,END;而且沒有必要,所以我認為這不是你的意思。而且你根本不需要DECLARE一個程序,這是暗示的。- 如果你想要一個 PL/SQL 變數的默認值,然后分配它,而不是使用
DEFAULT. - 使用本機 Oracle 型別可能會更好,因此
NUMBER或PLS_INTEGER代替INT. - 賦值是 with
:=,不是SET ... = ...。 CHAR_LENGTH應該只是LENGTH(除非你有自己的函式名稱)。- 在 PL/SQL中,您必須選擇某物,然后選擇某物。但是如果你在這里這樣做,你仍然必須以某種方式將它回傳給呼叫者。
- 鑒于您想要“列印”字串,您可能想要
dbms_output- 盡管這依賴于客戶端顯示結果,默認情況下大多數情況下不顯示結果,并且它通常僅用于除錯......
所以這會起作用:
CREATE PROCEDURE print_string(input_string IN VARCHAR2) AS
num_chars PLS_INTEGER := 0;
BEGIN
IF input_string IS NULL THEN
num_chars := 0;
ELSE
num_chars := LENGTH(input_string);
END IF;
DBMS_OUTPUT.PUT_LINE(UPPER(input_string) || ': ' || num_chars);
END;
/
BEGIN
DBMS_OUTPUT.ENABLE;
print_string('This is a test');
END;
/
1 rows affected
dbms_output:
THIS IS A TEST: 14
小提琴
但同樣,dbms_output并不理想。
uj5u.com熱心網友回復:
這里的代碼語法不正確。它應該是這樣的
CREATE OR REPLACE PROCEDURE print_string(input_string IN VARCHAR2)
IS
BEGIN
uj5u.com熱心網友回復:
您可以解決問題(在@Alex Poole 的答案中列出)并將程序簡化為:
CREATE PROCEDURE print_string(
input_string IN VARCHAR2
)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(UPPER(input_string) || ', ' || COALESCE(LENGTH(input_string), 0));
END;
/
然后:
BEGIN
DBMS_OUTPUT.ENABLE;
print_string('This is a test');
print_string(NULL);
END;
/
輸出:
THIS IS A TEST, 14 , 0
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/525383.html
標籤:sql甲骨文
上一篇:帶有localdateMethodArgumentTypeMismatchException例外的Mockmcv查詢引數
