我是Oracle存儲過程的新手。我寫了下面的存儲過程並給出結果。Oracle傳遞表變量
我相信表變量和參數變量或者是同名的。如何在不改變變量names.O處理這種情況
CREATE OR REPLACE PROCEDURE procedval (Code IN varchar(50),Id1 OUT INTE)
AS
BEGIN
Id1 := 0;
SELECT Id1 INTO id1
FROM tabl1
WHERE Code = Code;
END;
我是Oracle存儲過程的新手。我寫了下面的存儲過程並給出結果。Oracle傳遞表變量
我相信表變量和參數變量或者是同名的。如何在不改變變量names.O處理這種情況
CREATE OR REPLACE PROCEDURE procedval (Code IN varchar(50),Id1 OUT INTE)
AS
BEGIN
Id1 := 0;
SELECT Id1 INTO id1
FROM tabl1
WHERE Code = Code;
END;
試試這個:
with t as
(SELECT Id1 as New_Id1, Code as New_code)
FROM tabl1)
select New_Id1 into Id1
from t
WHERE New_code = Code;
另一種解決方案是這樣的一個:
execute immediate 'select Id1 from tabl1 where Code = :b' into Id1 using Code;
嘗試SELECT tabl1.Id1 INTO Id1...
你不能爲此做任何事情,這就是制定標準的原因,對於變量聲明。它 之一,一個PL/SQL
變量應與l_
(本地)或g_
(全局)
數據庫與判斷歧義操作數(左或右)中的哪個一個分貝柱或可變結束前綴。
另外添加一些更多的光線,在查詢中使用的任何變量,將被視爲一個bind variable implicitly.
的一些問題:
VARCHAR
datatype should not be used和VARCHAR2
應在其場所使用 - VARCHAR
是目前與VARCHAR2
同義,但是與不同的比較語義相比,VARCHAR數據類型被調度爲重新定義爲用於可變長度字符串的單獨數據類型(即,對於VARCHAR2
空字符串相當於NULL
值,但當VARCHAR
被重新定義時,則空的VARCHAR
將不等於NULL
)。VARCHAR2
而不是VARCHAR(50)
。
%TYPE
- 如tabl1.code%TYPE
和tabl1.id1%TYPE
。SELECT
語句完成(如果需要異常處理程序,則可以根據需要在那裏定義它)。喜歡的東西:
的Oracle 11g R2架構設置:
CREATE TYPE INTE IS OBJECT(x NUMBER(3), y NUMBER(3))
/
CREATE TABLE tabl1 (
code VARCHAR2(50),
id1 INTE
)
/
INSERT INTO tabl1 VALUES ('a', INTE(3, 4))
/
CREATE OR REPLACE PROCEDURE procedval (
code IN tabl1.code%TYPE,
Id1 OUT tabl1.id1%TYPE
)
AS
BEGIN
SELECT t.Id1
INTO Id1
FROM tabl1 t
WHERE t.Code = code;
EXCEPTION
WHEN NO_DATA_FOUND THEN
Id1 := NULL;
END;
/
嘗試使用 「ID1」 的列名(與雙引號) – Sebas
是什麼一個「INTE?「另外,沒有參數的大小聲明(除非使用子類型),所以刪除」(50)「不要將參數命名爲與列相同的參數。嘗試使用前綴,例如P_Code,P_Id1等。 – OldProgrammer