File: dbms_pipe.sql

package info (click to toggle)
orafce 3.0.7-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 1,144 kB
  • ctags: 1,068
  • sloc: ansic: 7,504; sql: 5,841; lex: 1,040; makefile: 93; yacc: 80; sh: 9
file content (58 lines) | stat: -rw-r--r-- 1,639 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
CREATE TYPE testt AS (x integer, y integer, v varchar);

CREATE OR REPLACE FUNCTION st(integer, integer, varchar) 
RETURNS void AS $$
DECLARE t testt; r record;
BEGIN t.x := $1; t.y := $2; t.v := $3;
  select into r 10,10,'boo';
  PERFORM dbms_pipe.pack_message(t);
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION sk() 
RETURNS void AS $$
DECLARE t testt;
 o testt;
BEGIN t.x := 1; t.y := 2; t.v := 'Pavel Stehule';
  RAISE NOTICE 'SEND';
  PERFORM dbms_pipe.pack_message(t);
  PERFORM dbms_pipe.send_message('boo',4,10);
  RAISE NOTICE 'RECEIVE';
--  PERFORM dbms_pipe.receive_message('boo',4);
--  SELECT INTO o * from dbms_pipe.unpack_message_record() as (x integer, y integer, v varchar);
--  RAISE NOTICE 'received %', o.v;  
END;
$$ LANGUAGE plpgsql;



CREATE OR REPLACE FUNCTION SessionA() RETURNS void AS $$
BEGIN
  FOR i IN 1..100000 LOOP
    PERFORM dbms_pipe.pack_message('Prvni '||i);
    PERFORM dbms_pipe.pack_message('Druhy '||i);
    RAISE NOTICE 'SEND';
    IF dbms_pipe.send_message('pipe_name',4,10) = 1 THEN
      RAISE NOTICE 'Timeout';
      PERFORM pg_sleep(5);
      PERFORM dbms_pipe.send_message('pipe_name',4,10);
    END IF;
    PERFORM pg_sleep(random());
  END LOOP;
END; $$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION SessionB() RETURNS void AS $$
BEGIN
  FOR i IN 1..100000 LOOP
    IF dbms_pipe.receive_message('pipe_name',4) = 1 THEN
      RAISE NOTICE 'Timeout';
      PERFORM pg_sleep(5);
      CONTINUE;
    END IF;
    RAISE NOTICE 'RECEIVE % %', dbms_pipe.unpack_message_text(), 
      dbms_pipe.unpack_message_text();
    PERFORM pg_sleep(random());
  END LOOP;
END; $$ LANGUAGE plpgsql;