- 浏览: 518156 次
- 性别:
- 来自: 惠州
-
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
1.求字持串的长度LENGTH
您可用LENGTH函数求字符串的长度。LENGTH返回一个数值。该值等于参数中的字符个数。
例:使用LENGTH函数
SQL>select Last_Name, length(Last_Name) from customer order by LastName;
2.使用SUBSTR函数从字符串中提取子串
语法:
SUBSTR函数的语法如下:
SUBSTR(string, string charcter, number of charcters)
变量定义如下:
string为字符列或字符串表达式
string charcter为子串的起始位置
number of charcters为返回字符的个数c
例:说明了怎样使用SUBSTR函数取得教师的姓的前四个字符
SQL>select last_Name, substr(Last_Name, 1, 4) from instector order by Last_Name
例:在SUBSTR函数中使用LENGTH函数(取后三个字符)
5Qt.>select last_Name, substr(Last_Name, Length(Last_Name) - 2, 3) from instector order by Last_Name
3.在字符串中查找模式
例:使用LIKE运算符
SQL>column description format a40 word_wrapped
SQL>column title format a35
SQL>select Title, Description from Course where Description like '%thory%' or Description like '%theories%';
4.替换字符串的一部分
经常遇到的数据操纵任务是在特定的列中将数据由一种模式转换成另一种模式。
假设您希望在Course表中改变课程说明,将说明中的字seminar用字discussion替代.那么您可用oracle提供的函数REPLACE,该函数使得某列的字符串能被另一字符串代替。
语法:
REPLACE函数的语法如下:
REPLACE(string, existion_string, [replacement_string])
变量定义如下:
string为字符表达式c
existion_string为已存在的字符串。
replacement_string为用来替代的可选字符串。
例:使用REPLACE函数
显示了在Course表中如何使用REPLACE来改变课程名称(title):首先使用查询显示当前课程名称,UPDATE语句中使用REPLACE函数将SEMINAR改变成DISCUSSION,另一查询显示了UPDATE语句的效果。
SQL>update Course set Title = replace(Title, 'SEMINAR', "DISCUSSION');
注:如果在REPLACE函数中您没有指明用什么字符串去替代,则列中的原字符串将被删除。
5.删除字符串的空格
如果字符串列中包含前导或尾部空格,按某指定值对列进行查询,很可能返回错误结果。
LTRIM和RTRIM。
6.LPAD左填充函数
使用LPAD对字符串进行左填充。
语法:
LPAD(string, n, pad_string);
变量定义如下:
string为需左填充的字符串直接值或字符申列。
n为LPAD返回的字符串长度。
pad_string为左填充到string的字符串。
SQL>select lpad(my_col, 20) from test_trim;
使用LENGTH函数人微言轻LPAD函数的参数:
SQL>select lpad(my_col, length(my_col) + 8, 'you say') from test_trim;
7.改变字符串的大小写
oracle提供了三个改变字符串大小写的函数:
INITCAP转换每个字的第一个字符为大写
LOWER转换所有字符为小写
UPPER转换所有字符为人写
8.使用DECODE函数(值转换函数)转换字符串
语法
DECODE的语法是:
DECODE(expression, value1, returned_value1, ... valueN, returned_valueN, [default_returned_value]
变量定义如下:
Dexpression为合法的oracle表达式。
valueN为此expression可能取的值:
returned_valueN为expression等于valueN时DECODE的返回值。
default_returned_value为可选项,它是expression不等于任何valueN时DECODE的返回值。
SQL>select Schedult_id, Day, decode(Day, 1, 'sun', 2, 'mon', 3, 'tue', 4, 'wed', 5, 'thu', 6, 'fri', 7, 'sat')
from Schedult_Type_Details order by Schedult_id, Day;
9.转换字符串为ASCII值
SQL>select Last_Name, SCAII(Last_Name) from Instructor order by Last_Name;
10.当前日期和时间:SYSDATE
11.转换日期为字符串
语法:
T0_CHAR函数的格式如下:
TO_CHAR(date_value,format)
SQL>select Last_Name, First_Name, to_char(Hire_Date, "MONTH DD, YYYY') H_DATE from Employee order by Hire_Date;
在SUBSTR函数中嵌入to_char函数
SQL>select Last_Name, First_Name, substr(to_char(Hire_date, 'MON), 1, 1) the_fist_letter_of_the_month from Employee;
12.转换字符串为日期
语法:
to_date(string_value, date_format);
SQL>select SYSDATE, to_date('07-04-1976', 'MM-DD-YYYY') from dual;
13.日期和时间
在to_char函数中使用时间格式:
SQL>select Employee_id, (to_char(time, clocked_in, 'HH:MM:SS') Time_Clocked_In from Time_Clock;
14.计算两个日期的差值
SQL>select sysdate + 7 from dual;
15.在Insert\Update等操作时,数字会自动转换为字符串。数字字段可以用to_char转换为串。
16.格式化数值字段
select to_char(Additional_Fees, '9,999.99') from Course;
货币符号:
select to_char(Additional_Fees, '¥9,999.99') from Course;
科学计数法:
select to_char(Additional_Fees, '9.9999EEEE') from Course;
17.将字符串转换成数字
to_number是to_char的逆运算。
update Security_Price set Last_Qtr_EPS = to_number('$2.81', '$999.99');
18.内部统计函数
AVG(value):计算平均值,它的参数来自于它所作用的若干行。
STDDEV(value):返回它所作用的若干行作为参数的标准差。
VARIANCE(value):返回它所作用的若干行作为参数的。
19.四舍五入函数和截取函数
四舍五入ROUND(value, [scale]) ROUND(101.8) = 102 Round(123.37, 1) = 123.4
截取TRUNC(value, [scale]) Trunc(123.33) = 123 Trunc(123.567, 2) = 123.56
求最大整数FLOOR(value) Floor(128.3)=128 Floor(129.8) = 129 除了不能截取小数部分外,Floor几乎等同于Trunc函数。
求最小整数CELL(value) Cell(128.3)=129 Cell(129.8) = 130
20.求最大或最小值
MAX和MIN。
21.替换NULL
NVL(column, value)。
select nvl(Additional, 0) from Course;
22.内部聚合函数
COUNT函数:
查找相异的行:DISTINCT
分组:GROUP BY: select Department_id, count(*) from curse group by Department_id;
group by 和having: select Department_id, count(*) from Course group by Department_id having count(*) = 4; --哪些部门开设了4门课。
avg和group by: select Department_id, avg(Additional_Fees) from Course group by Department_id;
23.EXISTS
select Last_Name, Fist_Name from Instructor I where exists(select * from Class C where I.Instruetor_id = C.Instructor_id);
24.SELECT语句的集合操作
INTERSECE(交)
UNION(并): select Epicenter_Latitude, Epicenter_Longtitude from UNSD_Event UNION select Location_Lat, Location_Lon, Richter_Number from RIND_Event order by 1;
MINUS(差): select Last_Name, First_Name from Instructor minus select Last_Name, First_Name from Hoover_Instructor;
25.用子查询建立一个表
create table Anthor as select * from instructor where 1 = 2;
26.创建一个简单的视图
create view Stueent_No_Personal
as
select Student_ID, Last_Name, First_Name from Student;
27.PL/SQL块的结构
说明部分
执行部分
例外处理部分
例:
DECLARE
max_records CONSTANT int := 100;
i int := 1;
BEGIN
FOR i in 1..max_records LOOP
INSERT INTO test_table(record_number, current_date) values(i, sysdate);
END LOOP;
COMMIT;
END;
/
28.用%TYPE声明一个变量
例:为了说明一个用来储存修理仓库技师名字的变量,可这样 Tech_Name Dept_Esimate.Techican %TYPE;
29.用%ROWTYPE声明一个变量
例:用一个复合变量存储Depot_Estimate表的一行。 Depot_Est_Row Depot_Esimate %ROWTYPE;
Depot_Est_Row的元素可以用以下方法使用:Depot_Est_Row.Techniciam := 'yujj';
30.一些常见的控制结构
IF语句:
if MOD(i, 5) = 0 then
rec_number := 5;
elseif MOD(i, 7) = 0 then
rec_number := 7;
else
rec_number := i;
end if;
简单的LOOP/EXIT语句:
LOOP
EXIT WHEN...;
ENDLOOP;
WHILE_LOOP语句:
WHILE i <100 LOOP
i := i + 1;
END LOOP;
FOR_LOOP语句:
for i in 1..max loop
i := i + 1;
dbms_output.put_line('j:'||to_char(j));
end loop;
GOTO语句:
goto more_processing;
...
<<more_processing>>
...
end;
NULL语句:
if (mod(i, 10) = 0 ) then
i := i + 1;
else
NULL;
end if;
赋值语句:
pl/sql中使用:=进行赋值。
31.在PL/SQL中使用SQL语句
PL/SQL和SELECT语句:
set serveroutput on
declare
Average_Body_Temp Patient.Body_Temp.Deg_F%TYPE;
begin
dbms_output.enable;
select avg(Body_Temp_Deg_F) into Average_Body_Temp from Patient;
dbms_putput.put_line('Average body temp is Deg.F:' || to_char(Average_Body_Temp.'999.99'));
end;
子块的应用:
一个匿名块,它包含另一个子块
declare
max_i constrant int := 100;
i int := 1;
rec_number int;
begin
for i in 1..max_i loop
if mod(i, 5) = 0 then
rec_number := 5;
else
rec_number := i;
end if;
insert into test_table(record_number, current_date) values(record_number, sysdate);
-- Here is a sub block;
declare
max_j constrant int := 20;
j int := 1;
begin
for j in 1..max_j loop;
rec_number := rec_number * j;
insert into test_table(record_number, current_date) values(record_number, sysdate);
end loop;
end;
end loop;
一个过程的示例:
declare
New_Patient_ID Patient.Patient_ID%TYPE;
High_Fever constant real := 42.0;
procedure Record_Patient_Temp_Deg_C(Patient_ID varchar2, Body_Temp_Deg_C real) is
Temp_Deg_F real;
begin
Temp_Deg_F := (9.0/5.0)*Body_Temp_Deg_C + 32.0;
insert into Patient(Patient_ID, Body_Temp_Deg_F) values(Patient_ID, TempDeg_F);
commit;
end;
begin
New_Patient_ID := 'GG9999';
Record_Patient_Temp_Deg_C(New_Patient_ID, High_Fever);
end;
/
--一个过程内声明的变量在过程体外不能被使用。
一个函数的示例:
function Max_Additional_Fees(Dept_ID IN varchar2)
return varchar2 is
Additional_Fees Course.Additional.Fees%TYPE;
begin
...
return something;
end;
过程和函数的参数类型:IN/OUT/IN OUT
32.关于dbms_output包的调用:先输入set serveroutput on;
33.系统视图USER_SOURCE,保存有过程、函数、包等。它有以下四列:
NAME 包括过程、函数、包或包体的名字
TYPE 批出源代码是属于过程、函数包还是包体
TEXT 包含源代码中的一行
LINE 包含在TEXT中源代码所包含的行数
例:select line, text from user_source where name = 'DROP_CLASS' order by line;
34.SELECT和存储函数:
在SELECT中可以使用存在的存储函数
create or replac function DegF_add10(Deg_F IN number)
return number is
Deg_C number;
begin
deg_c := deg_f + 10;
return deg_c;
end DegF_add10;
select body_temp, DegF_add10(body_temp) from patient;
35.附加PL/SQL数据类型
boolean binary_integer, natural, positive %type %rowtype pl/sql表或数组 用户自定义记录
36.ORACLE预定义例外
DUP_VAL_ON_INDEX:当SQL语句要在存在唯一索引的列中建立重复数据时发生。
INVALID_NUMBER:当SQL语句指定无效数字时发生。
NO_DATTE_FOUND:当SELECT语句没有返回任何行时发生。
TOO_MANY_ROWS:在PL/SQL环境中,一条SELECT语句检索多行数据时发生。为了从一个查询检索任意数目的行,可使用游标,可将游标看成是查询返回结果的窗口。
在pl/sql中,一条SELECT语句返回多个数据行时就会发生这个例外。
VALUE_ERROR:多数情况与截断和转换误差有关。如给一个varchar2(5)的字段赋值长度超过5的字符串。
37.SQLCODE和SQLERRM
SQLCODE包括当前执行oracle pl/sql语句的错误状态。如果SQL语句没有错误,则SQLCODE为0;
SQLERRM包括与SQLCODE相关的错误信息。如果SQL语句执行成功,则SQLCODE为0,SQLERRM为一个字符串:ORA_0000:normal,successful completion.
38.使用游标的步骤
1.说明(declare)游标,给游标起个名字,并且与SELECT语句在语法上相关联。
2.打开(open)游标,Oracle RDBMS执行与游标相关的查询,并确定所限定的行(活动集)。
3.用游标提取数据行:将每一行的值返回到PL/SQL子程序环境中,一次返回一行。
4.关闭(close)游标,释放相关资源。
39.说明游标
CURSOR cursor_name
[(parameter1 parameter1_datetype[ := default1],
..
[parameterN parameterN_datetype[ := derfaultN])]
IS select_stmt;
40.打开游标
Open cursor_name;
说明:如果在定义游标时,没有声明参数的类型,在OPEN游标时,必须给相关的参数指定变量或是直接值。如open tempcur(20,30);
41.从游标中取出行
loop
fetch tmpcur into field1, field2;
exit when tmpcur%notfound;
dbms_output.put_line(field1);
end loop;
42.关闭游标
close tmpcur;
43.取游标返回的行数
dbms_output.put_line(tmpcur%rowcount);
44.在oracle数据库中查询结果的行号使用伪列ROWNUM表示(从1开始)。!!!数据库分页可以使用它!!!
例如select * from employee where rownum<10 返回前10条记录。但因为rownum是在查询之后排序之前赋值的,所以查询employee按birthday排序的第100到120条记录应该这么写:
select * from (
select my_table.*, rownum as my_rownum from (select name, birthday from employee order by birthday
) my_table where rownum <120
)where my_rownum>=100
例:给多表查询的结果加上序列号
select rownum as "SerialNo", b."pName", a."compName" from "fundCompAccount" a, "fundPersonAccount" b
where a."compAccount" = b."compAccount";
--以上已经打印20040511
Oracle选定前20条数据
select * from "fundDuty" where rownum < 20;
Oracle选定21至40条数据
select * from "fundDuty" where rownum <=40
minus
select * from "fundDuty" where rownum <=21
您可用LENGTH函数求字符串的长度。LENGTH返回一个数值。该值等于参数中的字符个数。
例:使用LENGTH函数
SQL>select Last_Name, length(Last_Name) from customer order by LastName;
2.使用SUBSTR函数从字符串中提取子串
语法:
SUBSTR函数的语法如下:
SUBSTR(string, string charcter, number of charcters)
变量定义如下:
string为字符列或字符串表达式
string charcter为子串的起始位置
number of charcters为返回字符的个数c
例:说明了怎样使用SUBSTR函数取得教师的姓的前四个字符
SQL>select last_Name, substr(Last_Name, 1, 4) from instector order by Last_Name
例:在SUBSTR函数中使用LENGTH函数(取后三个字符)
5Qt.>select last_Name, substr(Last_Name, Length(Last_Name) - 2, 3) from instector order by Last_Name
3.在字符串中查找模式
例:使用LIKE运算符
SQL>column description format a40 word_wrapped
SQL>column title format a35
SQL>select Title, Description from Course where Description like '%thory%' or Description like '%theories%';
4.替换字符串的一部分
经常遇到的数据操纵任务是在特定的列中将数据由一种模式转换成另一种模式。
假设您希望在Course表中改变课程说明,将说明中的字seminar用字discussion替代.那么您可用oracle提供的函数REPLACE,该函数使得某列的字符串能被另一字符串代替。
语法:
REPLACE函数的语法如下:
REPLACE(string, existion_string, [replacement_string])
变量定义如下:
string为字符表达式c
existion_string为已存在的字符串。
replacement_string为用来替代的可选字符串。
例:使用REPLACE函数
显示了在Course表中如何使用REPLACE来改变课程名称(title):首先使用查询显示当前课程名称,UPDATE语句中使用REPLACE函数将SEMINAR改变成DISCUSSION,另一查询显示了UPDATE语句的效果。
SQL>update Course set Title = replace(Title, 'SEMINAR', "DISCUSSION');
注:如果在REPLACE函数中您没有指明用什么字符串去替代,则列中的原字符串将被删除。
5.删除字符串的空格
如果字符串列中包含前导或尾部空格,按某指定值对列进行查询,很可能返回错误结果。
LTRIM和RTRIM。
6.LPAD左填充函数
使用LPAD对字符串进行左填充。
语法:
LPAD(string, n, pad_string);
变量定义如下:
string为需左填充的字符串直接值或字符申列。
n为LPAD返回的字符串长度。
pad_string为左填充到string的字符串。
SQL>select lpad(my_col, 20) from test_trim;
使用LENGTH函数人微言轻LPAD函数的参数:
SQL>select lpad(my_col, length(my_col) + 8, 'you say') from test_trim;
7.改变字符串的大小写
oracle提供了三个改变字符串大小写的函数:
INITCAP转换每个字的第一个字符为大写
LOWER转换所有字符为小写
UPPER转换所有字符为人写
8.使用DECODE函数(值转换函数)转换字符串
语法
DECODE的语法是:
DECODE(expression, value1, returned_value1, ... valueN, returned_valueN, [default_returned_value]
变量定义如下:
Dexpression为合法的oracle表达式。
valueN为此expression可能取的值:
returned_valueN为expression等于valueN时DECODE的返回值。
default_returned_value为可选项,它是expression不等于任何valueN时DECODE的返回值。
SQL>select Schedult_id, Day, decode(Day, 1, 'sun', 2, 'mon', 3, 'tue', 4, 'wed', 5, 'thu', 6, 'fri', 7, 'sat')
from Schedult_Type_Details order by Schedult_id, Day;
9.转换字符串为ASCII值
SQL>select Last_Name, SCAII(Last_Name) from Instructor order by Last_Name;
10.当前日期和时间:SYSDATE
11.转换日期为字符串
语法:
T0_CHAR函数的格式如下:
TO_CHAR(date_value,format)
SQL>select Last_Name, First_Name, to_char(Hire_Date, "MONTH DD, YYYY') H_DATE from Employee order by Hire_Date;
在SUBSTR函数中嵌入to_char函数
SQL>select Last_Name, First_Name, substr(to_char(Hire_date, 'MON), 1, 1) the_fist_letter_of_the_month from Employee;
12.转换字符串为日期
语法:
to_date(string_value, date_format);
SQL>select SYSDATE, to_date('07-04-1976', 'MM-DD-YYYY') from dual;
13.日期和时间
在to_char函数中使用时间格式:
SQL>select Employee_id, (to_char(time, clocked_in, 'HH:MM:SS') Time_Clocked_In from Time_Clock;
14.计算两个日期的差值
SQL>select sysdate + 7 from dual;
15.在Insert\Update等操作时,数字会自动转换为字符串。数字字段可以用to_char转换为串。
16.格式化数值字段
select to_char(Additional_Fees, '9,999.99') from Course;
货币符号:
select to_char(Additional_Fees, '¥9,999.99') from Course;
科学计数法:
select to_char(Additional_Fees, '9.9999EEEE') from Course;
17.将字符串转换成数字
to_number是to_char的逆运算。
update Security_Price set Last_Qtr_EPS = to_number('$2.81', '$999.99');
18.内部统计函数
AVG(value):计算平均值,它的参数来自于它所作用的若干行。
STDDEV(value):返回它所作用的若干行作为参数的标准差。
VARIANCE(value):返回它所作用的若干行作为参数的。
19.四舍五入函数和截取函数
四舍五入ROUND(value, [scale]) ROUND(101.8) = 102 Round(123.37, 1) = 123.4
截取TRUNC(value, [scale]) Trunc(123.33) = 123 Trunc(123.567, 2) = 123.56
求最大整数FLOOR(value) Floor(128.3)=128 Floor(129.8) = 129 除了不能截取小数部分外,Floor几乎等同于Trunc函数。
求最小整数CELL(value) Cell(128.3)=129 Cell(129.8) = 130
20.求最大或最小值
MAX和MIN。
21.替换NULL
NVL(column, value)。
select nvl(Additional, 0) from Course;
22.内部聚合函数
COUNT函数:
查找相异的行:DISTINCT
分组:GROUP BY: select Department_id, count(*) from curse group by Department_id;
group by 和having: select Department_id, count(*) from Course group by Department_id having count(*) = 4; --哪些部门开设了4门课。
avg和group by: select Department_id, avg(Additional_Fees) from Course group by Department_id;
23.EXISTS
select Last_Name, Fist_Name from Instructor I where exists(select * from Class C where I.Instruetor_id = C.Instructor_id);
24.SELECT语句的集合操作
INTERSECE(交)
UNION(并): select Epicenter_Latitude, Epicenter_Longtitude from UNSD_Event UNION select Location_Lat, Location_Lon, Richter_Number from RIND_Event order by 1;
MINUS(差): select Last_Name, First_Name from Instructor minus select Last_Name, First_Name from Hoover_Instructor;
25.用子查询建立一个表
create table Anthor as select * from instructor where 1 = 2;
26.创建一个简单的视图
create view Stueent_No_Personal
as
select Student_ID, Last_Name, First_Name from Student;
27.PL/SQL块的结构
说明部分
执行部分
例外处理部分
例:
DECLARE
max_records CONSTANT int := 100;
i int := 1;
BEGIN
FOR i in 1..max_records LOOP
INSERT INTO test_table(record_number, current_date) values(i, sysdate);
END LOOP;
COMMIT;
END;
/
28.用%TYPE声明一个变量
例:为了说明一个用来储存修理仓库技师名字的变量,可这样 Tech_Name Dept_Esimate.Techican %TYPE;
29.用%ROWTYPE声明一个变量
例:用一个复合变量存储Depot_Estimate表的一行。 Depot_Est_Row Depot_Esimate %ROWTYPE;
Depot_Est_Row的元素可以用以下方法使用:Depot_Est_Row.Techniciam := 'yujj';
30.一些常见的控制结构
IF语句:
if MOD(i, 5) = 0 then
rec_number := 5;
elseif MOD(i, 7) = 0 then
rec_number := 7;
else
rec_number := i;
end if;
简单的LOOP/EXIT语句:
LOOP
EXIT WHEN...;
ENDLOOP;
WHILE_LOOP语句:
WHILE i <100 LOOP
i := i + 1;
END LOOP;
FOR_LOOP语句:
for i in 1..max loop
i := i + 1;
dbms_output.put_line('j:'||to_char(j));
end loop;
GOTO语句:
goto more_processing;
...
<<more_processing>>
...
end;
NULL语句:
if (mod(i, 10) = 0 ) then
i := i + 1;
else
NULL;
end if;
赋值语句:
pl/sql中使用:=进行赋值。
31.在PL/SQL中使用SQL语句
PL/SQL和SELECT语句:
set serveroutput on
declare
Average_Body_Temp Patient.Body_Temp.Deg_F%TYPE;
begin
dbms_output.enable;
select avg(Body_Temp_Deg_F) into Average_Body_Temp from Patient;
dbms_putput.put_line('Average body temp is Deg.F:' || to_char(Average_Body_Temp.'999.99'));
end;
子块的应用:
一个匿名块,它包含另一个子块
declare
max_i constrant int := 100;
i int := 1;
rec_number int;
begin
for i in 1..max_i loop
if mod(i, 5) = 0 then
rec_number := 5;
else
rec_number := i;
end if;
insert into test_table(record_number, current_date) values(record_number, sysdate);
-- Here is a sub block;
declare
max_j constrant int := 20;
j int := 1;
begin
for j in 1..max_j loop;
rec_number := rec_number * j;
insert into test_table(record_number, current_date) values(record_number, sysdate);
end loop;
end;
end loop;
一个过程的示例:
declare
New_Patient_ID Patient.Patient_ID%TYPE;
High_Fever constant real := 42.0;
procedure Record_Patient_Temp_Deg_C(Patient_ID varchar2, Body_Temp_Deg_C real) is
Temp_Deg_F real;
begin
Temp_Deg_F := (9.0/5.0)*Body_Temp_Deg_C + 32.0;
insert into Patient(Patient_ID, Body_Temp_Deg_F) values(Patient_ID, TempDeg_F);
commit;
end;
begin
New_Patient_ID := 'GG9999';
Record_Patient_Temp_Deg_C(New_Patient_ID, High_Fever);
end;
/
--一个过程内声明的变量在过程体外不能被使用。
一个函数的示例:
function Max_Additional_Fees(Dept_ID IN varchar2)
return varchar2 is
Additional_Fees Course.Additional.Fees%TYPE;
begin
...
return something;
end;
过程和函数的参数类型:IN/OUT/IN OUT
32.关于dbms_output包的调用:先输入set serveroutput on;
33.系统视图USER_SOURCE,保存有过程、函数、包等。它有以下四列:
NAME 包括过程、函数、包或包体的名字
TYPE 批出源代码是属于过程、函数包还是包体
TEXT 包含源代码中的一行
LINE 包含在TEXT中源代码所包含的行数
例:select line, text from user_source where name = 'DROP_CLASS' order by line;
34.SELECT和存储函数:
在SELECT中可以使用存在的存储函数
create or replac function DegF_add10(Deg_F IN number)
return number is
Deg_C number;
begin
deg_c := deg_f + 10;
return deg_c;
end DegF_add10;
select body_temp, DegF_add10(body_temp) from patient;
35.附加PL/SQL数据类型
boolean binary_integer, natural, positive %type %rowtype pl/sql表或数组 用户自定义记录
36.ORACLE预定义例外
DUP_VAL_ON_INDEX:当SQL语句要在存在唯一索引的列中建立重复数据时发生。
INVALID_NUMBER:当SQL语句指定无效数字时发生。
NO_DATTE_FOUND:当SELECT语句没有返回任何行时发生。
TOO_MANY_ROWS:在PL/SQL环境中,一条SELECT语句检索多行数据时发生。为了从一个查询检索任意数目的行,可使用游标,可将游标看成是查询返回结果的窗口。
在pl/sql中,一条SELECT语句返回多个数据行时就会发生这个例外。
VALUE_ERROR:多数情况与截断和转换误差有关。如给一个varchar2(5)的字段赋值长度超过5的字符串。
37.SQLCODE和SQLERRM
SQLCODE包括当前执行oracle pl/sql语句的错误状态。如果SQL语句没有错误,则SQLCODE为0;
SQLERRM包括与SQLCODE相关的错误信息。如果SQL语句执行成功,则SQLCODE为0,SQLERRM为一个字符串:ORA_0000:normal,successful completion.
38.使用游标的步骤
1.说明(declare)游标,给游标起个名字,并且与SELECT语句在语法上相关联。
2.打开(open)游标,Oracle RDBMS执行与游标相关的查询,并确定所限定的行(活动集)。
3.用游标提取数据行:将每一行的值返回到PL/SQL子程序环境中,一次返回一行。
4.关闭(close)游标,释放相关资源。
39.说明游标
CURSOR cursor_name
[(parameter1 parameter1_datetype[ := default1],
..
[parameterN parameterN_datetype[ := derfaultN])]
IS select_stmt;
40.打开游标
Open cursor_name;
说明:如果在定义游标时,没有声明参数的类型,在OPEN游标时,必须给相关的参数指定变量或是直接值。如open tempcur(20,30);
41.从游标中取出行
loop
fetch tmpcur into field1, field2;
exit when tmpcur%notfound;
dbms_output.put_line(field1);
end loop;
42.关闭游标
close tmpcur;
43.取游标返回的行数
dbms_output.put_line(tmpcur%rowcount);
44.在oracle数据库中查询结果的行号使用伪列ROWNUM表示(从1开始)。!!!数据库分页可以使用它!!!
例如select * from employee where rownum<10 返回前10条记录。但因为rownum是在查询之后排序之前赋值的,所以查询employee按birthday排序的第100到120条记录应该这么写:
select * from (
select my_table.*, rownum as my_rownum from (select name, birthday from employee order by birthday
) my_table where rownum <120
)where my_rownum>=100
例:给多表查询的结果加上序列号
select rownum as "SerialNo", b."pName", a."compName" from "fundCompAccount" a, "fundPersonAccount" b
where a."compAccount" = b."compAccount";
--以上已经打印20040511
Oracle选定前20条数据
select * from "fundDuty" where rownum < 20;
Oracle选定21至40条数据
select * from "fundDuty" where rownum <=40
minus
select * from "fundDuty" where rownum <=21
发表评论
-
oracle 数据库 删除用户所有对象
2010-11-15 15:29 1216在命令行下执行sqlplus 用户名/密码 (不要删syste ... -
oracle角色权限 赋予用户
2010-09-09 09:13 3216oracle角色权限 一、权 ... -
Oracle 10g学习总结
2010-09-08 17:05 1090Oracle 10g学习总结 1.登 ... -
PL/SQL分页 包,存储过程,游标实现 java调存储过程,返回集合
2010-05-26 15:15 207420.PL/SQL分页 文章分类:数据库 编写分页过程 ... -
Oracle 交叉表 固定值 行转列
2010-05-11 17:18 2088Oracle 交叉表 固定值 如果速度固定只有0 ... -
oracle-总结 oracle函数 oracle用法 oracle基础知识
2010-05-11 17:16 1280有时间可以看看复习一 ... -
Oracle创建表空间、创建用户以及授权、查看权限
2010-03-26 14:51 918Oracle创建表空间、创建用户以及授权、查看权限 创建临 ... -
oracle开发的数据库管理工作
2009-11-05 11:31 894/** *author:erick *time:2009081 ... -
oracle操作
2009-09-29 15:25 9611.安装oracle 2.用sys登录 3.新建用户 4 ... -
rownum来说它是oracle
2008-04-24 20:17 1173对于rownum来说它是oracle ... -
Oracle语句优化53个规则详解(1)
2008-04-24 20:16 9081. 选用适合的ORACLE优化 ...
相关推荐
COMSOL激光增材制造技术:热流力三场耦合模型的构建与模拟研究,COMSOL激光增材制造中热-流-力三场耦合模型的研究与应用:基于固体传热、固体力学、层流和动网格技术的多物理场分析,comsol激光增材制造热-流-力三场偶合模型 选用固体传热,固体力学,层流和动网格,考虑热物性以及马兰戈尼效应、表面张力,相变潜热,热对流和热辐射等 【软件工具】COMSOL5.6 【备注】,comsol三维模型 ,核心关键词:comsol; 激光增材制造; 热-流-力三场偶合模型; 固体传热; 固体力学; 层流; 动网格; 热物性; 马兰戈尼效应; 表面张力; 相变潜热; 热对流; 热辐射; COMSOL5.6; 三维模型。,COMSOL 5.6激光增材制造三场耦合模型
基于PLL的SMO滑模观测器算法在永磁同步电机无传感器矢量控制中的应用及其与反正切SMO的对比:有效消除转速抖动,基于PLL的SMO滑模观测器算法在永磁同步电机无传感器矢量控制中的应用及其与反正切SMO的对比:有效消除转速抖动,基于PLL的SMO滑模观测器算法,永磁同步电机无传感器矢量控制,跟基于反正切的SMO做对比,可以有效消除转速的抖动。 ,基于PLL的SMO滑模观测器算法; 永磁同步电机无传感器矢量控制; 反正切SMO; 转速抖动消除。,基于PLL SMO滑模观测器:永磁同步电机无传感器矢量控制新算法,优化抖动消除效能
【毕业设计】java-springboot+vue个人云盘管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
【毕业设计】java-springboot-vue电影推荐系统实现源码(完整前后端-mysql-说明文档-LunW).zip
基于OpenCV和Python的实时口罩识别系统:支持摄像头与图片检测,界面简洁操作便捷,基于OpenCV的口罩识别系统 相关技术:python,opencv,pyqt (请自行安装向日葵远程软件,以便提供远程帮助) 软件说明:读取用户设备的摄像头,可实时检测画面中的人的口罩佩戴情况,并给予提示。 有基础的同学,可稍作修改,检测图片。 第一张为运行主界面。 第二张为部分代码截图。 第三和第四张为运行界面。 ,基于OpenCV的口罩识别系统; Python; OpenCV; PyQt; 远程协助; 摄像头读取; 实时检测; 口罩佩戴情况提示; 代码截图; 运行界面。,"基于OpenCV与Python的口罩识别系统:实时检测与提醒"
内容概要:本文是一份关于 Git 和 GitHub 的入门指南,详细介绍了一整套从安装到进阶使用的完整流程。文章首先阐述了版本控制的重要性,并解释了 Git 的特点和优势。接着逐步介绍了 Git 和 GitHub 的使用方法,包括安装设置 Git、创建和管理 GitHub 账户、创建和克隆仓库,以及日常操作如提交、推送、拉取、分支管理和处理冲突的具体指令和操作步骤。还涉及到高级主题如合并请求、持续集成等功能的介绍,帮助读者深入了解 Git 和 GitHub 的应用范围和最佳实践。 适用人群:适用于刚开始接触版本控制系统的初学者,特别是那些正在寻找 Git 和 GitHub 实际操作指导的学生和技术爱好者。 使用场景及目标:①为刚踏入软件开发领域的新人提供详尽的基础教学,使其能够快速理解和掌握必要的技能;②指导已有一定经验但仍想进一步深化理解的开发人员如何优化日常工作流程;③促进团队合作效率提升,通过具体的实例演示如何利用版本控制系统协调多人协作。 其他说明:随着 Git 和 GitHub 成为现代软件开发的标准工具之一,这份资料不仅涵盖了关键知识点,而且配有多图例解析和实操练习,确保每个阶段的学习都能得到良好反馈和支持。读者可以通过动手实践来巩固所学知识,在实践中遇到困难也能及时参考本文获得解决方案。
python安装-16. 使用指定序列和数值创建一个字典——分配伴侣.py
本研究的目的是基于Python和OpenCV开发一个魔方识别系统,并提供相应的源码和部署教程。通过该系统,用户可以将魔方的图像输入,系统可以自动识别魔方的状态,并给出相应的还原方案。具体来说,本研究的主要内容包括以下几个方面: 图像预处理:通过使用OpenCV提供的图像处理算法,对输入的魔方图像进行预处理,包括图像去噪、边缘检测、图像分割等操作,以提高后续的识别准确率。 特征提取与模式识别:通过使用OpenCV提供的特征提取算法,对预处理后的图像进行特征提取,以获取魔方的状态信息。然后,通过机器学习算法,对提取到的特征进行模式识别,以确定魔方的状态。 还原方案生成:根据识别到的魔方状态,使用经典的还原算法,生成相应的还原方案。通过该方案,用户可以轻松地还原魔方,提高解决效率。
基于Springboot与Vue.js的WMS仓库管理系统源码详解:前后端分离架构下的Java实践与功能详述,基于Springboot和Vue的前后端分离WMS仓库管理系统源码,详细功能参考详情。,Springboot vue仓库管理系统源码Java 前后端分离 WMS仓库管理 BS 功能见详情 ,Springboot; Vue; 仓库管理系统; 源码; Java; 前后端分离; WMS仓库管理; BS; 功能详情,Springboot+Vue仓库管理系统源码:前后端分离的WMS管理BS应用
用AI学安卓游戏开发1——控制小球上下左右移动2代码, 初始化小球随机自有移动,遇到屏幕边缘反弹,摇杆介入后小球停止自有移动,按照摇杆控制方向移动。
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
基于ATP-EMTP的110kV海底电缆与架空线雷击过电压仿真分析与研究,基于ATP-EMTP的110kV海底电缆与架空线雷击过电压仿真分析与研究,110kV海底电缆-架空线雷击过电压ATP-EMTP仿真分析 ,核心关键词: 110kV海底电缆; 架空线; 雷击过电压; ATP-EMTP仿真分析; 分析。 关键词用分号分隔,如上所示。,雷击过电压仿真分析:110kV海底电缆及架空线ATP-EMTP研究
基于800kV高压直流输电的VSC-HVDC仿真模型研究:控制策略与性能分析,基于800kV-VSC-HVDC的直流输电仿真模型研究:深入探讨控制结构与电压稳定性,800kV-VSC-HVDC直流输电仿真模型(Matlab) 流器拓扑:VSC两电平流器 电压等级:直流800kV,交流500kV 控制结构:逆变侧定有功控制与电流内环PI+前馈解耦,整流侧定直流电压与电流内环+PI前馈解耦; 输电距离:100km; 双端电压电流均为对称的三相电压电流; 直流电压稳定在800kV; 双端网侧THD<2% 电子资料, ,800kV; VSC HVDC; 直流输电仿真模型; Matlab; VSC两电平换流器; 直流电压稳定; 逆变侧定有功控制; 电流内环PI+前馈解耦; 整流侧定直流电压与电流内环; 输电距离; 双端电压电流对称; 双端网侧THD<2%。,Matlab仿真模型:800kV VSC两电平换流器HVDC输电系统
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
【毕业设计】java-springboot-vue电商应用系统实现源码(完整前后端-mysql-说明文档-LunW).zip
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
uniapp使用蓝牙通信示例