Create or replace function abc(row_id in number) return number
as
id_count number;
Begin
Select count (distinct column_name)
into id_count
from students_table
where class='A1' and row_id=row_id and grade='a' ;
Return id_count ;
End abc;
現在,即使我傳遞了一個 row_id,其類和等級分別為 'b1' 和 'b',該函式仍然回傳 1,但它應該回傳 0,因為該 row_id 沒有匹配的類和等級條件。
任何人都可以建議
uj5u.com熱心網友回復:
不要使用與列相同的名稱命名 PL/SQL 變數(或者,在這種情況下,函式引數)。
Create or replace function abc(
p_row_id in STUDENTS_TABLE.ROW_ID%TYPE -- use a different name.
) return number
as
id_count number;
Begin
Select count (distinct column_name)
into id_count
from students_table
where class='A1'
and row_id=p_row_id -- don't use "row_id = row_id"
and grade='a';
Return id_count;
End abc;
/
如果您使用row_id = row_idthen 它與1 = 1條件相同,因為 Oracle 不知道您打算將左側作為列值,將右側作為函式引數,并將在條件的兩側使用相同的值.
uj5u.com熱心網友回復:
重命名函式的引數,使其與列名不匹配。
例如
Create or replace function abc(P_row_id in number) return number
謂詞
where class='A1' and row_id=row_id and grade='a'
被解釋為
where class='A1' and students_table.row_id=students_table.row_id and grade='a'
所以函式回傳與限制的所有行class,并grade在row_id IS NOT NULL -這基本上是你觀察到的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321333.html
上一篇:從物化視圖獲取列型別
