🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### 变量 ***** 变量名 + 变量类型。声明变量: ``` countNum number(10); --别忘了写上具体的长度,并且以分号结束 maxId number(10); --别忘了写上具体的长度,并且以分号结束 ``` 定义`type`的写法为`type type_name is record(col_name col_type);`这样,括号里可以写多个,中间用`,`分割,但最后一个不能有`,`,具体如下 ``` set serveroutput on; DECLARE TYPE new_type IS RECORD --以TYPE type_name IS RECORD开始 ( v_ly_nl LY_DS.LY_NL%TYPE, v_ly_mc varchar(100) --最后不要加, ); --最后以 ;结束 v_obj new_type; --将新对象定义为刚才声明的类型 BEGIN --into赋值给v_obj,会按照定义的type顺序赋值 select ly_nl,ly_mc into v_obj from ly_ds where id='2'; dbms_output.put_line('第一个变量:'||v_obj.v_ly_nl); dbms_output.put_line('第二个变量:'||v_obj.v_ly_mc); END; ``` 通过`%ROWTYPE`的声明写法 `%ROWTYPE`该类型是提取行记录时常用的存储数据的方式。这种声明方式,可以直接引用表中的行作为变量类型,它同`%TYPE`在优点上类似,避免因表中字段的数据类型改变,而导致`PL/SQL`块出错的问题。   下边是`%ROWTYPE`的用法例子,挺简单的: ``` set serveroutput on; DECLARE v_obj ly_ds%rowtype; --ROWTYPE不区分大小写 BEGIN --into赋值给v_obj,会按照定义的type顺序赋值 select * into v_obj from ly_ds where id='2'; dbms_output.put_line('第一个变量:'||v_obj.ly_nl); dbms_output.put_line('第二个变量:'||v_obj.ly_mc); END; ``` >注意一个地方,**就是上边的`into`前边,只能为`*`,如果要写为具体的列,那就要写全**。 ### 流程控制 ***** if ``` if ... then elsif ... then else end if; ``` case ``` declare i number; BEGIN select count(*) into i from DVD_DVD; case i 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); when 4 then dbms_output.put_line(4); when 5 then dbms_output.put_line(5); else dbms_output.put_line('else'); end case; end; ``` while ``` ``` ### 循环 无条件循环 LOOP ``` declare i number := 1; j number := 0; begin loop /* 另一种写法 if i >= 11 then exit; end if; */ exit when i>=5; j := j + i; i := i + 1; end loop; dbms_output.put_line(j); end; ``` while循环 ``` declare i number := 1; j number := 1; begin while i <= 100 loop if mod(i, 2) = 0 then j := j * i; end if; i := i + 1; end loop; dbms_output.put_line(j); dbms_output.put_line(length(to_char(j))); end; ``` for 循环 ``` declare i number := 1; j number := 1; begin for i in 1..100 loop if mod(i, 2) = 0 then j := j * i; end if; end loop; dbms_output.put_line(j); dbms_output.put_line(length(to_char(j))); end; ``` ### 日期转化 ``` declare c_d varchar2(30); d_d date; c_d := '2017-1-1 00:00:00'; s,'yyyy-mm-dd hh24:mi:ss') c_d = to_char(d_d,'yyyy-mm-dd hh24:mi:ss') ```