2013-02-06 78 views
0

表一:無法創建過程

PROTOCOL  VARCHAR2(20) 

表B:

YEAR   NUMBER(4) 
MONTH   VARCHAR2(20) 
PROTOCOL  VARCHAR2(20) 
DATE1   DATE 

我的程序代碼:

CREATE PROCEDURE his 
    @Year NUMBER(4), 
    @Month VARCHAR2(20) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    BEGIN TRANSACTION trninsert 
     DECLARE @@date DATE 
     SET @@date = sysdate; 
     INSERT INTO b (Year, month, date1, protocol) 
     (select @Year, @Month, @@date,* from a) 
    COMMIT TRANSACTION trninsert 
    END TRY 
    BEGIN CATCH 
     ROLLBACK TRANSACTION trninsert 
    END CATCH 
END 

我使用PLSQL開發商和它顯示在程序錯誤。

+2

它顯示的是什麼錯誤? –

+0

爲PROCEDURE編譯錯誤CAFANALYST.HIS #13#10Error:PLS-00103:出現符號「@」在需要下列之一時: (;與AUTHID如使用管線化編譯 包裹外部確定性parallel_enable簇壓縮順序 Line:2 文本:@年份(4), – user2039795

回答

3

你已經寫了這個mysql類型的語法。

甲骨文將是:

CREATE PROCEDURE his(p_year b.year%type, 
        p_month b.month%type) 
AS 
BEGIN 
    INSERT INTO b (Year, month, date1, protocol) 
    select p_year, p_month, sysdate, a.protocol 
    from a; 
    commit; 
END; 

儘管其不良的形式在程序中提交。

如:

SQL> CREATE PROCEDURE his(p_year b.year%type, 
    2      p_month b.month%type) 
    3 AS 
    4 BEGIN 
    5 INSERT INTO b (Year, month, date1, protocol) 
    6 select p_year, p_month, sysdate, a.protocol 
    7  from a; 
    8 commit; 
    9 END; 
10/

Procedure created. 

SQL> insert into a values('prot a'); 

1 row created. 

SQL> exec his(2012, 10) 

PL/SQL procedure successfully completed. 

SQL> select * from b; 

     YEAR MONTH    PROTOCOL    DATE1 
---------- -------------------- -------------------- --------- 
     2012 10     prot a    06-FEB-13 

SQL> 
+0

它的工作。我得到了輸出。非常感謝您的幫助。非常感謝。 – user2039795

+0

嗨它的工作,但我想要使用相同的總共5個表數據。所以,而不是寫b.year%類型,b.month%類型,我們可以使用通用參數,並創建一個程序,並且只創建5個insert into語句嗎? – user2039795

+0

@ user2039795通過泛型指代'varchar2'等而不是'%type '?如果是這樣,當然。 – DazzaL

0

你的程序是不是一個有效的格式:改變你與整個結構,

CREATE [OR REPLACE] PROCEDURE procedure_name 
    [ (parameter [,parameter]) ] 

IS 
    [declaration_section] 

BEGIN 
    executable_section 

[EXCEPTION 
    exception_section] 

END [procedure_name]; 

詳細參數:點擊here

+0

感謝你分享這個信息。 – user2039795

0

是的,你沒有使用plsql語法:

代碼將爲:

CREATE OR REPLACE PROCEDURE his 
    (Year b.year%type, 
    Month b.month%type) 
AS 
BEGIN 
     INSERT INTO b (Year, month, date1, protocol) 
     VALUES select Year, Month, sysdate,a.protocol from a ; 
COMMIT; 

END;