- 浏览: 514735 次
- 性别:
- 来自: 惠州
文章分类
- 全部博客 (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 1208在命令行下执行sqlplus 用户名/密码 (不要删syste ... -
oracle角色权限 赋予用户
2010-09-09 09:13 3210oracle角色权限 一、权 ... -
Oracle 10g学习总结
2010-09-08 17:05 1078Oracle 10g学习总结 1.登 ... -
PL/SQL分页 包,存储过程,游标实现 java调存储过程,返回集合
2010-05-26 15:15 206820.PL/SQL分页 文章分类:数据库 编写分页过程 ... -
Oracle 交叉表 固定值 行转列
2010-05-11 17:18 2082Oracle 交叉表 固定值 如果速度固定只有0 ... -
oracle-总结 oracle函数 oracle用法 oracle基础知识
2010-05-11 17:16 1270有时间可以看看复习一 ... -
Oracle创建表空间、创建用户以及授权、查看权限
2010-03-26 14:51 909Oracle创建表空间、创建用户以及授权、查看权限 创建临 ... -
oracle开发的数据库管理工作
2009-11-05 11:31 886/** *author:erick *time:2009081 ... -
oracle操作
2009-09-29 15:25 9531.安装oracle 2.用sys登录 3.新建用户 4 ... -
rownum来说它是oracle
2008-04-24 20:17 1164对于rownum来说它是oracle ... -
Oracle语句优化53个规则详解(1)
2008-04-24 20:16 9021. 选用适合的ORACLE优化 ...
相关推荐
### SQL 常用语句及函数详解 #### 一、WHERE 条件 `WHERE` 子句用于在 `SELECT` 语句中过滤记录。...以上是 SQL 中常用的语句和函数的一些基本介绍和示例。通过这些工具,你可以高效地管理数据库中的数据。
SQL 语言中有多种类型的函数,可以按照不同的分类方式来分类,下面将从函数类别、聚合函数、转换函数、加密函数、游标函数、日期和时间函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统...
3. **50个Sql语句**: 这可能是一个练习集,涵盖了SQL基础到进阶的各种操作,如SELECT、INSERT、UPDATE、DELETE等,也可能包含JOIN、子查询、聚合函数等复杂用法。 4. **完善SQL农历转换函数**: 农历转换函数是处理...
以上内容总结了Oracle数据库中常用的SQL语句及函数,涵盖了数据库的基本操作、数据管理、数据定义和查询等方面。对于初学者来说,掌握这些基础是非常重要的。希望这份指南能够帮助大家更好地理解和应用Oracle数据库...
6. **系统信息函数**:如`@@ROWCOUNT`返回最后一条SQL语句影响的行数,`@@IDENTITY`返回最后插入的自动增长值。 7. **位函数**:用于处理位数据类型,例如`BITAND()`, `BITOR()`, `BITXOR()`等,这些在处理二进制...
通过深入学习和理解这些函数,可以编写出更加高效和灵活的SQL语句,优化数据库操作,提升整体性能。在实际工作中,结合使用各种函数可以解决复杂的数据处理问题,提高工作效率。对于初学者和经验丰富的开发者来说,...
常用SQL语句及函数
- `@@ROWCOUNT()`: 返回最后一条SQL语句影响的行数。 - `DB_NAME()`: 返回当前数据库的名称。 7. **其他函数**: - `ISNULL()`: 如果表达式为NULL,返回替代值。 - `RAND()`: 生成一个0到1之间的随机浮点数。 ...
SQL作为一门标准的数据库语言,在实际应用中有很多常用的函数和语句,这些函数和语句可以帮助我们更方便地操作和处理数据。在本文中,我们将总结一些常用的SQL函数和语句,并对其进行详细的解释。 自动增量字段 在...
- 存储过程是一组预先编译的SQL语句,可以提高性能,减少网络流量,并提供更好的安全性。它们可以接受输入参数,有返回值,还可以包含控制流语句如`IF`、`WHILE`等。 - 创建存储过程的语法:`CREATE PROCEDURE ...
- **@@ROWCOUNT** 返回最后一条SQL语句影响的行数。 - **@@IDENTITY** 返回最后由INSERT语句生成的自动增长值。 - **@@VERSION** 显示SQL Server的版本信息。 4. **分组与统计函数**: - **GROUP BY** 用于对...
在SQL Server 2005中,数据库管理和数据查询是其核心功能,而函数和SQL语句则是实现这些功能的重要工具。这篇笔记主要探讨的是SQL Server 2005中的常用函数以及一些经典的SQL语句,这对于数据库管理员和开发人员来说...
6. **DATE函数和CONVERT**:第六条查询中,`CONVERT`函数用于将日期转换为指定格式,这里是为了统计1996年的订单总额。 7. **统计客户订单总额**:第七条查询通过联接`customer`和`sales`表,统计每个客户的订单...
本文将深入解析SQL中常用的日期函数之一:`DatePart`函数及其相关概念。 ### DatePart函数详解 `DatePart`函数用于从日期中提取指定的部分,比如年、月、日、小时等。其基本语法如下: ```sql DatePart(interval,...
- **定义**:存储过程是一组预编译的SQL语句,可以接受参数,执行特定任务,如数据查询、更新或插入等。 - **优点**:提高性能(因为编译只需一次),增强安全性(可以通过权限控制访问),减少网络流量(一次调用...
1. **QUOTENAME()**:此函数用于返回一个由特定字符包围的字符串,常用于SQL语句中避免关键字冲突,确保语句的正确执行。 2. **REPLICATE()**:REPLICATE()函数能够重复生成指定次数的字符串,对创建模式化的文本或...
"SQL表值函数" SQL表值函数是一种特殊的用户定义函数,用于返回一个表结构的结果集。...但是,需要正确地使用SQL表值函数,遵守函数命名惯例,正确地定义函数参数和返回类型,确保函数体的正确性,并遵守优化技巧。
PL/SQL 中的函数可以分为两大类:单行函数和组函数。单行函数用于处理单行数据,可以在 SELECT、WHERE、ORDER BY 等子句中使用。今天我们将讨论单行函数的使用和规则。 1. 日期格式转换函数 TO_CHAR 函数可以将...
在SQL Server 2000中,掌握常用的函数对于数据库管理和开发至关重要。SQL(Structured Query Language)是用于处理关系数据库的标准语言,而SQL Server 2000是微软推出的一款强大的数据库管理系统。以下将详细介绍...