2013-12-17 42 views
0

我正在從螞蟻腳本調用PL/SQL過程。在輸出窗口中顯示「構建成功」,但存儲過程proc.sql未執行。從螞蟻腳本調用PL/SQL過程不會運行存儲過程

這裏是我的構建腳本:

<target name="DATA"> 

<property name="oracle.scriptPath" value="D:\\ganganshu" /> 

<property name="oracle.tns_alias2" value="wind"/> 
<!-- Oracle user name --> 
<property name="oracle.user_name2" value="SILO2" /> 
<!-- Oracle Password --> 
<property name="oracle.password2" value="SILO2" /> 

<exec executable="sqlplus" failonerror="true"> 
    <arg value="${oracle.user_name2}/${oracle.password2}@${oracle.tns_alias2}"/> 
    <arg value="@${oracle.scriptPath}\\ELEM10_ELEM_PHX_WTPART.sql"/> 
    <arg value="@${oracle.scriptPath}\\proc.sql"/> 
</exec> 

</target> 

我的存儲過程是:

create or replace 
PROCEDURE ELEM10_ELEM_PHX_ATT_WTPART 
AS 
CURSOR targ_dest_relation IS 
    SELECT sourcecolumn FROM mapping where destinationtable='ATT_WTPART'; 
BEGIN 

DECLARE 
source_Table varchar2(255) := 'ELEM10_ELEM_PHX'; 
destination_Table varchar2(255) := 'ATT_WTPART'; 
src_Column varchar2(255); 
src_Type varchar2(255); 
src_Type_Value varchar2(255); 
src_Name varchar2(255); 
src_Name_Value varchar2(255); 
dest_Column varchar2(255); 
dest_Column_Value varchar2(255); 
query1 varchar2(255); 

BEGIN 

    FOR rec IN targ_dest_relation loop 
      dbms_output.put_line('destination_Table: ' || destination_Table); 
      dbms_output.put_line('source_Table: ' || source_Table); 

      src_Column := rec.sourcecolumn; 
      dbms_output.put_line('src_Column: ' || src_Column); 

      src_Type := 'select data_type from user_tab_columns where 
      table_name ='''||source_Table||'''and column_name='''|| 
      src_Column ||''''; 
      dbms_output.put_line('src_Type: ' || src_Type); 

      execute immediate src_Type INTO src_Type_Value; 
      dbms_output.put_line('src_Type_Value: ' || src_Type_Value); 

      dest_Column := 'select DEST_COLUMN from ATT_TABLE_MAPPING where 
      SOURCETYPE='''|| src_Type_Value || ''''; 
      dbms_output.put_line('dest_Column: ' || dest_Column); 

      execute immediate dest_Column INTO dest_Column_Value; 
      dbms_output.put_line('dest_Column_Value: ' || dest_Column_Value); 

      src_Name := 'select column_name from user_tab_columns where 
      table_name ='''|| source_Table ||''' and column_name= ''' || 
      src_Column || ''''; 
      dbms_output.put_line('src_Name: ' || src_Name); 

      execute immediate src_Name INTO src_Name_Value; 
      dbms_output.put_line('src_Name_Value: ' || src_Name_Value); 

      EXECUTE IMMEDIATE 'INSERT INTO ' || destination_Table || ' (IBANAME,' || 
      dest_Column_Value || ') SELECT :name,' || src_Column || 
      ' FROM ' || source_Table USING src_Name_Value; 

    END loop; 
END; 
END; 

爲什麼這不能運行存儲過程?

+0

那就是程序的公正定義,你在哪裏打電話嗎? – mucio

+0

這是我的問題..我需要從螞蟻腳本中調用它,所以如何調用它是我的問題 – user3069865

+0

在build.xml文件中,我需要調用哪個在頂部給出。 – user3069865

回答

1

在Ant腳本你想用一個sqlplus執行執行兩個文件,但不起作用。 sqlplus只是執行第一個文件而忽略第二個文件。如果你想在兩個不同的文件中創建過程和執行,你必須運行兩次sqplus。否則你的Ant腳本對我來說看起來不錯。

下面是一個示例,說明如何使用單個sqlplus運行創建,執行和刪除過程。

一切都在文件foo.sql

$ cat foo.sql 
-- just for demonstration with dbms_output 
set serveroutput on 

-- create procedure 
create or replace procedure foo is 
begin 
    dbms_output.put_line('Hello!'); 
end; 
/
show errors 

-- execute procedure 
exec foo 

-- remove procedure 
drop procedure foo; 

-- exit sqlplus 
exit 

sqlplus執行:

$ sqlplus -L joe/joe @foo.sql 

SQL*Plus: Release 11.2.0.2.0 Production on Tue Dec 17 16:31:20 2013 

Copyright (c) 1982, 2011, Oracle. All rights reserved. 


Connected to: 
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 


Procedure created. 

No errors. 
Hello! 

PL/SQL procedure successfully completed. 


Procedure dropped. 

Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 -  64bit Production 
$ 
+0

Thnx它的工作和抱歉,遲到的答覆.. – user3069865

0

嘗試在末尾添加:

/ 
EXECUTE ELEM10_ELEM_PHX_ATT_WTPART; 
/
+0

得到相同的結果 – user3069865

+0

把這個放在結束 user3069865

+0

不,把我的代碼放在.sql文件的末尾,或者只放在'EXECUTE ELEM10_ELEM_PHX_ATT_WTPART;'放在第二個.sql腳本中 – mucio