PL/SQl编程 基本语法

时间:2022-11-10 16:50:13
/*输出hello world*/
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World');
END; --set serveroutput on;
/**
if 语句
1.弹出提示信息
2.num接收一个数据地址
*/
-- accept num prompt '请输入一个数字';
DECLARE
PNUM NUMBER := #
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 := #
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 := #
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;