2011-10-13 218 views
4

任何人都可以請我指出允許綁定變量名稱的字符在哪裏列出?我花了幾個小時深入挖掘Oracle SQL文檔無濟於事。Oracle允許哪些字符綁定參數佔位符?

我的意思 「:ID」 中的以下內容:

SELECT * FROM mytable WHERE id = :id 

例如可以使用點像「:some.id」嗎?它的功能是否與沒有點的版本完全相同?

+0

你爲什麼不自己嘗試一下呢? –

+0

我需要確保它有文檔記錄,因此對於版本10以上的所有Oracle版本都有效。 –

+0

除非您使用EXECUTE IMMEDIATE,否則PL/SQL不需要這種綁定變量。這是否爲EXECUTE IMMEDIATE?或者你是指在其他上下文中使用綁定變量,如SQLplus,JDBC或ADO.NET? – Codo

回答

2

這兩個頁面的狀態綁定變量必須是「合法的Oracle標識符」 我找到的文檔沒有具體說明點可以 是法定標識符的一部分。我能夠在 中使用一個點名作爲綁定變量名稱,但看起來它不是 不推薦。

PAGES具有BIND變量命名約定 (這些頁陳述綁定變量必須是合法的標識符):

http://www.utoug.org/i/doc/concept_bind_var.htm

http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21674/concept_ses_val.htm#BEIEGCCC

PAGE描述合法的標識符: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm

我在這個頁面上找不到任何東西,說點是合法的 標識符的一部分(E.G.表或綁定變量名稱),但在數據庫鏈接中除外。 即使$和#是合法的,他們甚至不被推薦,所以「。」 可能會工作,但顯然不推薦(甚至沒有提到作爲合法的 此頁)

綁定變量名稱必須對應於項目名稱。 綁定變量名稱不區分大小寫。 綁定變量名稱不能超過30個字符(即,它們必須是有效的Oracle標識符)。

我知道,一個有效的Oracle IDENTIFER(基於ORACLE的定義一個合法的標識符 )不能以數字, 開始,可以有一些特殊字符,如$和。但是如果有 特殊字符,標識符必須用雙引號。

我能得到一個標識符以點處於困境 變量的工作,但我不得不把雙引號來綁定 變量時綁定變量曾在一個句點。

create or replace function F0416B 
RETURN VARCHAR2 
is 
    V_STMT VARCHAR2(1999); 
    V_RESULT VARCHAR2(1999); 
BEGIN 
    V_STMT := 'INSERT INTO TEST0411(FIELD1, FIELD2) VALUES (:"A.1" , :"A.2")'; 
    EXECUTE IMMEDIATE V_STMT USING 'AS201', 'AS202'; 
    RETURN 'INSERT-OK'; 
    COMMIT; 
EXCEPTION 
WHEN OTHERS THEN RETURN SQLERRM; 
END;  

這可以工作,但根據上述文件中綁定變量或其他對象的名稱一段/點

是不合法的/推薦...

這是對句子Oracle架構對象命名頁面是

告訴我:

不帶引號的標識符可以從databa只包含字母數字字符se字符集和下劃線(_),美元符號($)和井號(#)。數據庫鏈接也可以包含句點(。)和「at」符號(@)。 Oracle強烈建議您不要在非引用標識符中使用$和#。