2016-09-14 52 views
0

在上面的代碼中,我將schemaname作爲輸入並使用該輸入連接到數據庫。但是在這種情況下,我輸入的值不會被schemaname採用。這是如何把和錯誤是:使用變量 - Oracle

declare schemaname varchar2(20); 
exec :schemaname := XYZ; 
BEGIN 

end; 

Error report - 
ORA-06550: line 2, column 6: 
PLS-00103: Encountered the symbol "" when expecting one of the following: 

    constant exception <an identifier> 
    <a double-quoted delimited-identifier> table long double ref 
    char time timestamp interval date binary national character 
    nchar 
ORA-06550: line 4, column 1: 
PLS-00103: Encountered the symbol "CONNECT" when expecting one of the following: 

可以在任何一個建議如何使它工作使用declareend之間滑

回答

2

代碼爲PL/SQL。諸如CONNECTSPOOL之類的命令是SQL * Plus命令。您不能在PL/SQL塊中使用SQL * Plus命令。

你的情況,你不需要PL/SQL都:

與以下內容

connect &1 
spool C:\ABC 
@c:\ABC 
spool off; 

創建一個腳本和BTW運行

@your_script_name 

:沒有當你在後臺運行時運行腳本c:\ ABC的原因。你想要達到什麼目的?

+0

閥芯將默認爲'C:\ ABC.LST'因爲沒有後綴給出; '@'將默認爲'C:\ ABC.SQL'。所以他們不是同一個文件。爲了避免混淆,我寧願至少看到完整的spool名稱...... –

1

exec[ute]是SQL * Plus和SQL Developer(也可能是其他客戶端)對於匿名塊的簡寫。這是一個客戶端命令,它不是PL/SQL的一部分。你正在試圖在PL/SQL聲明部分內部使用它,在那裏它是無效的或無法識別的。

如果你想有一個客戶端綁定變量您需要的var[iable] command

var schemaname varchar2(20); 
exec :schemaname := '&1'; 

BEGIN 
... 

通知各地&1單引號,因爲它是被分配給一個字符串變量。

但是,您不能在PL/SQL塊內部進行連接,也無法爲連接使用綁定變量。

connect :schemaname 

會提示輸入密碼(即使你定義它的價值user/passwd),並嘗試連接作爲lieterally稱爲:schemaname用戶。

您可以使用替代變量,但您並不需要定義新變量;你似乎可以傳遞的憑據,你可以這樣做:

connect &1 

(不含周邊引號)