这时Oracle中计算100以内质数的一个PL/SQL过程,可以看到,除了调用DBMS_OUTPUT包之外,其他部分不用进行任何的修改就可以顺利执行,在达梦的PL/SQL语句中,提供了PRINT语句来代替DBMS_OUTPUT包:
SQL>DECLARE
2 V_FLAG BOOLEAN;
3 BEGIN
4 FOR I IN 2 .. 100 LOOP
5 V_FLAG := TRUE;
6 FOR J IN 2 .. TRUNC(POWER(I, 0.5)) LOOP
7 IF MOD(I,J) = 0 THEN
8 V_FLAG := FALSE;
9 EXIT;
10 END IF;
11 END LOOP;
12
13 IF V_FLAG = TRUE THEN
14 PRINT(I);
15 END IF;
16 END LOOP;
17 END;
18 /
DECLARE
V_FLAG BOOLEAN;
BEGIN
FOR I IN 2 .. 100 LOOP
V_FLAG := TRUE;
FOR J IN 2 .. TRUNC(POWER(I, 0.5)) LOOP
IF MOD(I,J) = 0 THEN
V_FLAG := FALSE;
EXIT;
END IF;
END LOOP;
IF V_FLAG = TRUE THEN
PRINT(I);
END IF;
END LOOP;
END;
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
0 rows affected
time used: 29.325(ms) clock tick:48929860.
2 V_FLAG BOOLEAN;
3 BEGIN
4 FOR I IN 2 .. 100 LOOP
5 V_FLAG := TRUE;
6 FOR J IN 2 .. TRUNC(POWER(I, 0.5)) LOOP
7 IF MOD(I,J) = 0 THEN
8 V_FLAG := FALSE;
9 EXIT;
10 END IF;
11 END LOOP;
12
13 IF V_FLAG = TRUE THEN
14 PRINT(I);
15 END IF;
16 END LOOP;
17 END;
18 /
DECLARE
V_FLAG BOOLEAN;
BEGIN
FOR I IN 2 .. 100 LOOP
V_FLAG := TRUE;
FOR J IN 2 .. TRUNC(POWER(I, 0.5)) LOOP
IF MOD(I,J) = 0 THEN
V_FLAG := FALSE;
EXIT;
END IF;
END LOOP;
IF V_FLAG = TRUE THEN
PRINT(I);
END IF;
END LOOP;
END;
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
0 rows affected
time used: 29.325(ms) clock tick:48929860.
除了匿名块外,达梦还支持PROCEDURE、FUNCTION和TRIGGER:
SQL>CREATE OR REPLACE PROCEDURE P_TEST AS
2 BEGIN
3 INSERT INTO T VALUES (1, 'TEST', SYSDATE);
4 COMMIT;
5 END;
6 /
CREATE OR REPLACE PROCEDURE P_TEST AS
BEGIN
INSERT INTO T VALUES (1, 'TEST', SYSDATE);
COMMIT;
END;
time used: 41.239(ms) clock tick:68574010.
SQL>SELECT * FROM T;
SELECT * FROM T;
id name create_date
0 rows got
time used: 0.319(ms) clock tick:520320.
SQL>BEGIN
2 P_TEST;
3 END;
4 /
BEGIN
P_TEST;
END;
1 rows affected
time used: 11.769(ms) clock tick:19487570.
SQL>SELECT * FROM T;
SELECT * FROM T;
id name create_date
1 1 TEST 2010-04-07
1 rows got
time used: 0.295(ms) clock tick:477140.
2 BEGIN
3 INSERT INTO T VALUES (1, 'TEST', SYSDATE);
4 COMMIT;
5 END;
6 /
CREATE OR REPLACE PROCEDURE P_TEST AS
BEGIN
INSERT INTO T VALUES (1, 'TEST', SYSDATE);
COMMIT;
END;
time used: 41.239(ms) clock tick:68574010.
SQL>SELECT * FROM T;
SELECT * FROM T;
id name create_date
0 rows got
time used: 0.319(ms) clock tick:520320.
SQL>BEGIN
2 P_TEST;
3 END;
4 /
BEGIN
P_TEST;
END;
1 rows affected
time used: 11.769(ms) clock tick:19487570.
SQL>SELECT * FROM T;
SELECT * FROM T;
id name create_date
1 1 TEST 2010-04-07
1 rows got
time used: 0.295(ms) clock tick:477140.