程序从其他 table 插入值

Procedure Insert value from other table

我在下面的简单程序中遇到错误

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;
/

Zunain,您遇到的具体错误是什么?

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

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

您可以在创建过程之前简单地使用 '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;

在您的 INSERT INTO ... SELECT 语句末尾放一个分号:

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

一些额外的建议:

  • 下次,post 错误信息。如果您这样做了,您可能会立即得到答复。
  • 重新考虑过程名称。调用 (a) 名称中包含 space 且 (b) 名称区分大小写的过程时,您会经历很多不必要的痛苦。

程序头中缺少两个东西 IS,sql 之后 semicolon。 以下代码有效:

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" 以减轻调用。