0

表a:

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開発者を使用していますが、プロシージャにエラーが表示されています。

4

3 に答える 3

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>
于 2013-02-06T07:55:45.713 に答える
0

あなたの手順は有効な形式ではありません: 構造全体を次のように変更してください:

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

IS
    [declaration_section]

BEGIN
    executable_section

[EXCEPTION
    exception_section]

END [procedure_name];

その他のパラメータ:ここをクリック

于 2013-02-06T08:01:58.167 に答える
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;
于 2013-02-06T15:02:44.363 に答える