File: 72-proc_plsql_alias.t

package info (click to toggle)
libsql-splitstatement-perl 1.00020-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 456 kB
  • sloc: perl: 3,231; sql: 1,478; makefile: 2
file content (154 lines) | stat: -rw-r--r-- 3,441 bytes parent folder | download | duplicates (3)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env perl

use strict;
use warnings;

use SQL::SplitStatement;

use Test::More tests => 9;

my $sql_code = <<'SQL';
CREATE OR REPLACE PACKAGE UTIL IS
   PROCEDURE VERIFY_USER(P_USER_NAME IN VARCHAR2);
END UTIL;
/

CREATE OR REPLACE PACKAGE BODY OS_UTIL IS
   PROCEDURE VERIFY_USER(P_USER_NAME IN VARCHAR2) IS
      a_user varchar2(30);
   BEGIN
      SELECT user INTO a_user FROM dual;
      IF upper(a_user) != upper(p_user_name) THEN
         RAISE_APPLICATION_ERROR(
            -20004,
            'This code can be run as user <' || p_user_name || '> only!'
         );
      END IF;
   END;
END OS_UTIL;
/

CREATE TRIGGER check_salary
              BEFORE INSERT OR UPDATE OF sal, job ON emp
              FOR EACH ROW
              WHEN (new.job != 'PRESIDENT')
          DECLARE
              minsal   NUMBER;
              maxsal   NUMBER;
          BEGIN
              /* Get salary range for a given job from table sals. */
              SELECT losal, hisal INTO minsal, maxsal FROM sals
                  WHERE job = :new.job;
              /* If salary is out of range, increase is negative, *
               * or increase exceeds 10%, raise an exception.     */
              IF (:new.sal < minsal OR :new.sal > maxsal) THEN
                  raise_application_error(-20225, 'Salary out of range');
              ELSIF (:new.sal < :old.sal) THEN
                  raise_application_error(-20320, 'Negative increase');
              ELSIF (:new.sal > 1.1 * :old.sal) THEN
                  raise_application_error(-20325, 'Increase exceeds 10%');
              END IF;
          END;

begin
    dbms_java.grant_permission
    ('RT_TEST',
     'java.io.FilePermission',
     '/usr/bin/ps',
     'execute');

    dbms_java.grant_permission
    ('RT_TEST',
     'java.lang.RuntimePermission',
     '*',
     'writeFileDescriptor' );
end;
/

CREATE OR REPLACE FUNCTION nested(some_date DATE) RETURN VARCHAR2 IS
 yrstr VARCHAR2(4);

-- beginning of nested function in declaration section 
FUNCTION turn_around (
  year_string VARCHAR2)
  RETURN VARCHAR2
IS
 
BEGIN
  yrstr := TO_CHAR(TO_NUMBER(year_string)*2);
  RETURN yrstr;
END;
-- end of nested function in declaration section
 
-- beginning of named function
BEGIN
  yrstr := TO_CHAR(some_date, 'YYYY');
  yrstr := turn_around(yrstr);
  RETURN yrstr; 
END; -- nested

begin
    dbms_java.grant_permission
    ('RT_TEST',
     'java.io.FilePermission',
     '/usr/bin/ps',
     'execute');

    dbms_java.grant_permission
    ('RT_TEST',
     'java.lang.RuntimePermission',
     '*',
     'writeFileDescriptor' );
end;

DECLARE
      PROCEDURE P1 IS
      BEGIN
         dbms_output.put_line('From procedure p1');
         p2;
      END P1;
      PROCEDURE P2 IS
      BEGIN
         dbms_output.put_line('From procedure p2');
         p3;
      END P2;
      PROCEDURE P3 IS
      BEGIN
         dbms_output.put_line('From procedure p3');
      END P3;
BEGIN
     p1;
END;


CREATE OR REPLACE PACKAGE UTIL IS
   PROCEDURE VERIFY_USER(P_USER_NAME IN VARCHAR2);
END UTIL;
/
SQL

my $splitter;
my @statements;
my @endings;

$splitter = SQL::SplitStatement->new;
@statements = $splitter->split( $sql_code );

cmp_ok(
    @statements, '==', 8,
    'Statements correctly split'
);
@endings = qw|
    UTIL
    OS_UTIL
    END
    end
    END
    end
    END
    UTIL
|;

like( $statements[$_], qr/\Q$endings[$_]\E$/, 'Statement ' . ($_+1) . ' check' )
    for 0..$#endings;