2013-07-09 32 views
13
CREATE TABLE app_for_leave 
(
    sno integer NOT NULL, 
    eid integer, 
    ename varchar(20), 
    sd date, 
    ed date, 
    sid integer, 
    status boolean DEFAULT false, 
    CONSTRAINT pk_snoa PRIMARY KEY (sno) 
); 

Insertion cơ bản là ::Làm thế nào để chèn dữ liệu vào bảng sử dụng thủ tục lưu trữ trong postgresql

INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) 
VALUES(1,101,'2013-04-04','2013-04-04',2,'f'); 

...

INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) VALUES (?, ?, ?, ?, ?, ?); 

Yêu cầu của bạn :: Làm thế nào để chèn dữ liệu vào một bảng sử dụng các thủ tục được lưu giữ?

+0

Tôi cần chèn dữ liệu, bằng cách tạo một chức năng hoặc thủ tục để chèn dữ liệu vào bảng app_for_leave – 09Q71AO534

+0

Postgres không có các thủ tục lưu sẵn, nó hỗ trợ các chức năng mặc dù .. –

+0

vì vậy không có cách nào khác để chèn dữ liệu ngoại trừ câu truy vấn ngôn ngữ DML câu lệnh INSERT..hoặc có cách nào khác để giải quyết điều này @mike christensen – 09Q71AO534

Trả lời

22

PostgreSQL doesn't support stored procedures, mỗi lần, nhưng bạn có thể nhận được kết quả tương tự bằng cách sử dụng hàm. Ví dụ:

CREATE FUNCTION MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean) 
    RETURNS void AS 
    $BODY$ 
     BEGIN 
     INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) 
     VALUES(_sno, _eid, _sd, _ed, _sid, _status); 
     END; 
    $BODY$ 
    LANGUAGE 'plpgsql' VOLATILE 
    COST 100; 

Sau đó, bạn có thể gọi nó như vậy:

select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f'); 

Những hạn chế chính về chức năng lưu trữ Thạc của - so với thủ tục được lưu trữ đúng - là:

  1. không có khả năng trả lại nhiều bộ kết quả
  2. không hỗ trợ cho các giao dịch tự quản (BEGIN, COMMIT và ROLLBACK trong một hàm)
  3. không hỗ trợ cú pháp CALL chuẩn SQL, mặc dù trình điều khiển ODBC và JDBC sẽ dịch các cuộc gọi cho bạn.

Example

+0

@ user2561626 - Bạn cần 'CREATE'' FUNCTION' trước tiên. Sử dụng ví dụ của tôi ở trên, tôi vừa xác minh nó với Postgres 9.2 trên máy chủ của riêng tôi. –

+0

plpgsql không hỗ trợ các giao dịch tự quản, nhưng các ngôn ngữ khác làm, ví dụ như plperl. Bạn có thể có thể thực hiện tương tự bằng cách sử dụng dblink và plproxy. – bma

+0

@ user2561626 - [Ví dụ] (http://sqlfiddle.com/#!12/89188/2) –

2

PostgreSQL không hỗ trợ lưu trữ thủ tục, nhưng bạn có thể nhận được kết quả tương tự sử dụng một hàm.

Bất kể dữ liệu bạn muốn chèn vào bảng được đưa ra làm thông số cho hàm bạn đang tạo.

TẠO HOẶC THAY THẾ thể hiện nếu một hàm có cùng tên (bạn đang sử dụng) đã có trong cơ sở dữ liệu, nó sẽ bị thay thế hoặc nếu không có chức năng nào có cùng tên thì không có hàm mới sẽ được tạo ra.

Bạn phải viết truy vấn insesrtion bên trong phần thân của hàm.

CREATE OR REPLACE FUNCTION Insert_into_table(_sno INTEGER, _eid INTEGER, _ename VARCHAR(20), _sd DATE, _ed DATE, _sid INTEGER) 
     RETURNS void AS 
     $BODY$ 
      BEGIN 
      INSERT INTO app_for_leave(sno, eid, sd, ed, sid) 
      VALUES(_sno, _eid, _sd, _ed, _sid); 
      END; 
     $BODY$ 
     LANGUAGE 'plpgsql' VOLATILE 
     COST 100; 

Như bạn đã đề cập trong bảng giá trị mặc định cho cộtStatus, bây giờ nó là không cần phải chèn dữ liệu vào cột đó

Dưới đây là SQLFiddle Liên kết cho sự hiểu biết của bạn

Các vấn đề liên quan