Fork me on GitHub

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 := #
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;

  

posted @ 2018-11-20 16:05  雪人奥特曼  阅读(337)  评论(0编辑  收藏  举报