PL/SQl编程 基本语法
/*输出hello world*/ DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Hello World'); END; --set serveroutput on; /** if 语句 1.弹出提示信息 2.num接收一个数据地址 */ -- accept num prompt '请输入一个数字'; DECLARE PNUM NUMBER := &NUM; BEGIN IF PNUM = 0 THEN DBMS_OUTPUT.PUT_LINE('您输入的数字是0'); ELSIF PNUM = 1 THEN DBMS_OUTPUT.PUT_LINE('您输入的数字是1'); ELSIF PNUM = 2 THEN DBMS_OUTPUT.PUT_LINE('您输入的数字是2'); ELSE DBMS_OUTPUT.PUT_LINE('您输入的是其他数字'); END IF; END; --普通 case DECLARE PNUM NUMBER := &NUM; BEGIN CASE PNUM WHEN 0 THEN DBMS_OUTPUT.PUT_LINE('你输入的数字是0'); WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('你输入的数字是1'); WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('你输入的数字是2'); WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('你输入的数字是3'); ELSE DBMS_OUTPUT.PUT_LINE('您输入的是其他数字'); END CASE; END; --条件case DECLARE P NUMBER := &NUM; BEGIN CASE WHEN P = 0 THEN DBMS_OUTPUT.PUT_LINE('你输入的数字是0'); WHEN P = 1 THEN DBMS_OUTPUT.PUT_LINE('你输入的数字是1'); ELSE DBMS_OUTPUT.PUT_LINE('您输入的是其他数字'); END CASE; END; /*打印1-10*/ SET SERVEROUTPUT ON; /*使用set serveroutput on 命令设置环境变量serveroutput为打开状态,从而使得pl/sql程序能够在SQL*plus中输出结果 */ DECLARE PNUM NUMBER := 1; BEGIN LOOP --退出 满足条件退出 EXIT WHEN PNUM > 10; DBMS_OUTPUT.PUT_LINE(PNUM); PNUM := PNUM + 1; END LOOP; END; /**输出变量*/ DECLARE I INT; J INTEGER := 11; C CHAR(4); C1 VARCHAR2(10) NOT NULL := 'aaa'; --不能为null C2 CONSTANT VARCHAR2(10) := 'afd'; --类型随之改变而改变,常量不能二次赋值 EMPNO EMP.EMPNO%TYPE; --SELECT * FROM emp; BEGIN -- i := 10; -- j := j + 1; -- c := 'abc'; -- c1 := 'a'; --c1 := null; -- error code --c2 := 'afd';--error code EMPNO := 1234; IF I = 10 THEN DBMS_OUTPUT.PUT_LINE('i是10'); ELSE DBMS_OUTPUT.PUT_LINE('i不是10'); END IF; DBMS_OUTPUT.PUT_LINE('i= : ' || I); DBMS_OUTPUT.PUT_LINE('j= : ' || J); DBMS_OUTPUT.PUT_LINE('c= : ' || C || LENGTH(C)); DBMS_OUTPUT.PUT_LINE('c1= : ' || C1); DBMS_OUTPUT.PUT_LINE('c2= : ' || C2); DBMS_OUTPUT.PUT_LINE('empno= : ' || EMPNO); END; ---**基本变量****- DECLARE --声明部分标识 V_JOB VARCHAR2(9); V_COUNT BINARY_INTEGER DEFAULT 0; V_TOTAL_SAL NUMBER(9, 2) := 0; V_DATE DATE := SYSDATE - 1; C_TAX_RATE CONSTANT NUMBER(3, 2) := 8.25; --常量不可二次赋值 V_VALID BOOLEAN NOT NULL := TRUE; BEGIN V_JOB := 'MANAGER'; --在程序中赋值 DBMS_OUTPUT.PUT_LINE(V_JOB); --输出变量v_job的值 DBMS_OUTPUT.PUT_LINE(V_COUNT); --输出变量v_count的值 DBMS_OUTPUT.PUT_LINE('日期是:' || V_DATE); --输出变量v_date的值 DBMS_OUTPUT.PUT_LINE(C_TAX_RATE); --输出变量c_tax_rate的值 END; --九九乘法表 for循环 DECLARE I NUMBER; J NUMBER; BEGIN FOR I IN 1 .. 9 LOOP FOR J IN 1 .. I LOOP --内循环 DBMS_OUTPUT.PUT(I || '*' || J || '=' || (I * J) || ' '); END LOOP; --外循环 DBMS_OUTPUT.PUT_LINE(''); END LOOP; END; --九九乘法表 while循环 DECLARE I NUMBER := 1; J NUMBER := 1; BEGIN WHILE I < 10 LOOP WHILE J <= I LOOP --内循环 DBMS_OUTPUT.PUT(I || '*' || J || '=' || (I * J) || ' '); J := J + 1; END LOOP; --外循环 I := I + 1; J := 1; DBMS_OUTPUT.PUT_LINE(''); END LOOP; END; --打印水仙花数 153 DECLARE I NUMBER; J NUMBER; K NUMBER; M NUMBER; BEGIN FOR I IN 100 .. 999 LOOP K := FLOOR(I / 100); --百位 J := FLOOR((I - K * 100) / 10); --十位 M := I MOD 10; --个位 IF I = J ** 3 + K ** 3 + M ** 3 THEN DBMS_OUTPUT.PUT_LINE(I); END IF; END LOOP; END; BEGIN FOR V_I IN REVERSE 1 .. 10 LOOP --v_i的值从10至1 DBMS_OUTPUT.PUT_LINE(V_I); END LOOP; END; /***循环嵌套加标号跳出****/ --使用一个基本嵌套循环,找出2-81中的素数,素数是指除了1和它本身以外,不能被任何整数整除的数。 DECLARE --素数范围 M NUMBER(3); --进行判读的因子 J NUMBER(3); BEGIN M := 2; <<OUTER_LOOP>> --外循环标记 LOOP J := 2; --内循环标记 <<INNER_LOOP>> LOOP --当m能被j整除或m与j相等时,结束该循环 EXIT WHEN((MOD(M, J) = 0) OR (J = M)); --不满足上述条件,给j加一继续当前循环 J := J + 1; END LOOP INNER_LOOP; --如果m与j相等输出m值 IF (J = M) THEN DBMS_OUTPUT.PUT_LINE(M || ' 是素数'); END IF; M := M + 1; --当m等于81结束当前循环 EXIT WHEN M = 81; END LOOP OUTER_LOOP; END;
--在主串中查找子串是否存在 declare mStr varchar2(30) := 'abaacbacabca'; sStr varchar2(5) := 'abc'; j integer; k integer; mLen integer; sLen integer; loopsize integer; begin --v_result := false; mLen := length(mStr); sLen := length(sStr); loopsize := mLen - sLen + 1; <<out_loop>> for i in 1..loopsize loop j := i; k := 1; while substr(mStr, j, 1) = substr(sStr, k, 1) loop if k = sLen then --v_result := true; dbms_output.put_line('success'); exit out_loop; end if; j := j+1; k := k+1; end loop; end loop; --return(v_result); end;