代码之家  ›  专栏  ›  技术社区  ›  Zunain Ahmad

程序从其他表中插入值[关闭]

  •  0
  • Zunain Ahmad  · 技术社区  · 8 年前

    我在下面的简单过程中出错

    Create or Replace PROCEDURE "My Procedure" 
      (
        vendor_name in VARCHAR2
      )
    BEGIN
    INSERT INTO cust_vendors_test (cust_vendor_name) 
    select  pv.vendor_name from po_vendors@prod09 pv
    END;
    /
    
    4 回复  |  直到 8 年前
        1
  •  2
  •   Ed Gibbs    8 年前

    在你的结尾放一个分号 INSERT INTO ... SELECT 声明:

    INSERT INTO cust_vendors_test (cust_vendor_name) 
      select  pv.vendor_name from po_vendors@prod09 pv;
                                                      ^
    

    还有几点建议:

    • 下次,发布错误消息。如果你这么做了,你可能会立即得到答案。
    • 重新考虑程序名称。如果调用一个proc(a)名称中有空格,并且(b)名称区分大小写,您将经历很多不必要的痛苦。
        2
  •  1
  •   Barbaros Özhan    8 年前

    有两件东西不见了 IS 在程序标题中,以及 semicolon sql之后。 以下代码工作:

    Create or Replace PROCEDURE "My Procedure" 
      (
        vendor_name in VARCHAR2
      ) IS
    BEGIN
    INSERT INTO cust_vendors_test (cust_vendor_name) 
    select  pv.vendor_name from po_vendors@prod09 pv;
    END;
    /
    

    但是你最好把这个过程命名为 My_Procedure 而不是 "My Procedure" 以减轻呼叫。

        3
  •  0
  •   Wesley Briney    8 年前

    在不知道我们正在处理什么的情况下,我已经重新格式化了,下面是我的建议。

    USE [MyDatabase]
    GO
    
    DROP PROCEDURE [Schema].[MyProcedure]
    GO
    
    CREATE PROCEDURE [Schema].[MyProcedure]
        @vendor_name  VARCHAR(100)
    
    AS
    BEGIN
    
    INSERT INTO cust_vendors_test 
        (
            cust_vendor_name
        ) 
    SELECT  pv.vendor_name AS cust_vendor_name
    FROM    po_vendors@prod09 AS pv
    
    END
    
        4
  •  0
  •   Kaushik Nayak    8 年前

    在创建过程之前,您可以简单地使用“exists” 即。。。

    IF EXISTS( SELECT * FROM sys.objects WHERE NAME = "My Procedure") BEGIN DROP PROCEDURE "My Procedure" END;
    
    Create PROCEDURE "My Procedure" 
    AS
    INSERT INTO cust_vendors_test (cust_vendor_name) VALUES
    (select  pv.vendor_name from po_vendors@prod09 pv)
    GO;