文档库 最新最全的文档下载
当前位置:文档库 › PLSQL学习简易快速入门

PLSQL学习简易快速入门

PLSQL学习简易快速入门
PLSQL学习简易快速入门

PLSQL学习简易快速入门

课程一 PL/SQL 基本查询与排序

本课重点:

1、写SELECT语句进行数据库查询

2、进行数学运算

3、处理空值

4、使用别名ALIASES

5、连接列

6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS

7、ORDER BY进行排序输出。

8、使用WHERE 字段。

一、写SQL 命令:

不区分大小写。

SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。

最后以;或 / 结束语句。

也可以用RUN来执行语句

二、例1:SQL> SELECT dept_id, last_name, manager_id FROM s_emp;

2:SQL> SELECT last_name, salary * 12, commission_pct FROM s_emp;

对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。

SQL> SELECT last_name, salary, 12 * (salary + 100) FROM s_emp;

三、列的别名ALIASES:

计算的时候特别有用;

紧跟着列名,或在列名与别名之间加“AS”;

如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。

例(因字体原因,读者请记住:引号为英文双引号Double Quotation):

SQL> SELECT last_name, salary, 12 * (salary + 100) ”Annual Salary” FROM s_emp;

四、连接符号:||

连接不同的列或连接字符串

使结果成为一个有意义的短语:

SQL> SELECT first_name || ’’ || last_name || ’, ’|| title ”Employees” FROM s_emp SQL> select divid ||' '|| divname from pub_t_division_test where

superid='001'

效果如下图:

五、管理NULL值:

SQL> SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMM FROM

s_emp;

此函数使NULL转化为有意义的一个值,相当于替换NULL。

select divid,divname,NVL(addr,0) from pub_t_division_test where

superid='001'

效果如下图:

六、SQL PLUS的基本内容,请参考

七、ORDER BY 操作:

与其他SQL92标准数据库相似,排序如:

SELECT expr FROM table[ORDER BY {column,expr} [ASC|DESC]];

从Oracle7 release 7.0.16开始,ORDER BY 可以用别名。

另:通过位置判断排序:

SQL> SELECT last_name, salary*12 FROM s_emp ORDER BY 2;

select * from pub_t_division_test where superid='001'order by3

这样就避免了再写一次很长的表达式。

另:多列排序:

SQL> SELECT last name, dept_id, salary FROM s_emp ORDER BY dept_id, salary DESC;

SQL>select * from pub_t_division_test where superid='001' order by

1,3 desc

八、限制选取行:

SELECT expr FROM table[WHERE condition(s)][ORDER BY expr];

例1:

SQL> SELECT first_name, last_name, start_date FROM s_emp WHERE start_date BETWEEN ’09-may-91

AND ’17-jun-91’;

例2:

SQL> SELECT last_name FROM s_emp WHERE last_name LIKE ’_a%’;

//显示所有第二个字母为 a的last_name,第一个字母’_’为一个占位符

例3:

如果有列为NULL

SQL> SELECT id, name, credit_rating FROM s_customer WHERE sales_rep_id IS NULL;

优先级:

Order Evaluated Operator

1 All comparison operators(=, <>, >, >=, <, <=, IN, LIKE, IS NULL, BETWEEN)

2AND

3OR

总结:我们今天主要学习了如何进行查询SELECT操作,具体的组合查询与子查询将在以后的课堂中学习,同时希望大家可以工作、学习中多多摸索,实践!

===================================================================== =

课程二 PL/SQL 查询行函数

本课重点:

1、掌握各种在PL/SQL中可用的ROW函数

2、使用这些函数的基本概念

3、SELECT语句中使用函数

4、使用转换函数

注意:以下实例中标点均为英文半角

一、FUNCTION的作用:

进行数据计算,修改独立的数据,处理一组记录的输出,不同日期显示格式,进行数据类型转换

函数分为:单独函数(ROW)和分组函数

注意:可以嵌套、可以在SELECT, WHERE, 和 ORDER BY中出现。

语法:function_name (column|expression, [arg1, arg2,...])

二、字符型函数

1、LOWER 转小写

2、UPPER

3、INITCAP首字母大写

4、CONCAT连接字符,相当于 ||

5、SUBSTR SUBSTR(column|expression,m[,n])

6、LENGTH返回字符串的长度

7、NVL转换空值

其中,1、2经常用来排杂,也就是排除插入值的大小写混用的干扰,如:

SQL> SELECT first_name, last_name FROM s_emp WHERE UPPER(last_name) = ’PATEL’;

FIRST_NAME LAST_NAME

Vikram Patel

Radha Patel

三、数学运算函数

1、ROUND

四舍五入:ROUND(45.923,2)= 45.92

ROUND(45.923,0)= 46

ROUND(45.923,-1)= 50

2、TRUNC

截取函数

TRUNC(45.923,2)= 45.92

TRUNC(45.923)= 45

TRUNC(45.923,-1)= 40

3、MOD余除

MOD(1600,300)

实例:

SQL> SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM SYS.DUAL;

四、Oracle日期格式和日期型函数:

1、默认格式为DD-MON-YY.

2、SYSDATE是一个求系统时间的函数

3、DUAL['dju:el] 是一个伪表,有人称之为空表,但不确切。

SQL> SELECT SYSDATE FROM SYS.DUAL;

4、日期中应用的算术运算符

例:SQL> SELECT last_name, (SYSDATE-start_date)/7 WEEKS FROM s_emp WHERE dept_id = 43;

DATE+ NUMBER = DATE

DATE-DATE= NUMBER OF DAYS

DATE + (NUMBER/24) = 加1小时

5、函数:

MONTHS_BETWEEN(date1, date2) 月份间隔,可正,可负,也可是小数

ADD_MONTHS(date,n)加上N个月,这是一个整数,但可以为负

NEXT_DAY(date,‘char’) 如:NEXT_DAY (restock_date,’FRIDAY’),从此日起下个周五。

ROUND(date[,‘fmt’])

TRUNC(date[,‘fmt’])

解释下面的例子:

SQL> SELECT id, start_date, MONTHS_BETWEEN (SYSDATE,start_date) TENURE, ADD_MONTHS(start_date,6) REVIEW

FROM s_emp WHERE MONTHS_BETWEEN (SYSDATE,start_date)<48;

我们看到:

MONTHS_BETWEEN (SYSDATE,start_date)<48,说明至今工作未满一年的员工。

LAST_DAY (restock_date) 返回本月的最后一天

SQL> select round(sysdate,'MONTH') from dual

ROUND(SYSD

----------

01-11月-01

round(sysdate,'YEAR') = 01-1月 -02

ROUND 之后的值比基值大的最小符合值,大家可以用更改系统时间的方法测试,以15天为分界线,也是

非常形象的四舍五入,而TRUNC恰好相反,是对现有的日期的截取。

五、转换函数:

1、TO_CHAR

使一个数字或日期转换为CHAR

2、TO_NUMBER

把字符转换为NUMBER

3、TO_DATE

字符转换为日期

这几个函数较为简单,但要多多实践,多看复杂的实例。

SQL> SELECT ID,TO_CHAR(date_ordered,’MM/YY’) ORDERED FROM

s_ord WHERE sales_rep_id = 11;

转换时,要注意正确的缺省格式:

SELECT TO_DATE('03-MAR-92') CORRECT FROM DUAL;//正确

SELECT TO_DATE('031092') CORRECT FROM DUAL;//不正确

SELECT TO_DATE('031095','MMDDYY') ERRORR FROM DUAL

输出 3月10日

SELECT TO_DATE('031095','DDMMYY') ERRORR FROM DUAL

输出 10月3日

4、实例:

SQL>select to_char(sysdate,'fmDDSPTH "of" MONTH YYYY AM') TODAYS FROM DUAL;

大小写没有什么影响,引号中间的是不参与运算。

实例:

SQL>SELECT ROUND(SALARY*1.25) FROM ONE_TABLE;

意义:涨25%工资后,去除小数位。在现实操作中,很有意义。

5、混合实例:

SQL> SELECT last_name, TO_CHAR(start_date,’fmDD ”of” Month YYYY’) HIREDATE FROM s_emp

WHERE start_date LIKE ’%91’;

LAST_NAME HIREDATE

Nagayama 17 of June 1991

Urguhart 18 of January 1991

Havel 27 of February 1991

这里要注意:fmDD 和 fmDDSPTH之间的区别。

SQL> SELECT id, total, date_ordered FROM s_ord WHERE date_ordered = TO_DATE(’September 7, 1992’,’

Month dd, YYYY’);

六、独立的函数嵌套

SQL> SELECT CONCAT(UPPER(last_name), SUBSTR(title,3)) ”Vice

Presidents” FROM s_emp

WHERE title LIKE ’VP%’;

* 嵌套可以进行到任意深度,从内向外计算。

例:

SQL> SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS (date_ordered,6),’FRIDAY’),

’fmDay, Month ddth, YYYY’) ”New 6 Month Review” FROM s_ord ORDER BY date_ordered;

SQL> SELECT last_name, NVL(TO_CHAR(manager_id),’No Manager’) FROM s_emp WHEREmanager_id IS NULL;

对于例子,大家重要的理解,并多做测试,并注意英文版和中文版在日期上的区别。

有些教材上的例子,不要盲目的相信其结果,实践后才有发言权,希望大家能够在学习的过程中不要忽略了

用,多想一想为什么实例要如此设计,在何种情况下应用此实例来解决问题。这样,我们才真正掌握了知识。

===================================================================== 课程三从多个表中提取数据

本课重点:

1、SELECT FROM 多个表,使用等连接或非等连接

2、使用外连接OUTER JOIN

3、使用自连接

注意:以下实例中标点均为英文半角

一、连接的概念:

是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。

连接类型:

等连接、不等连接、外连接、自连接

二、Cartesian product :

指的是当JOIN条件被省略或无效时,所有表的行(交叉)都被SELECT出来的现象。

Cartesian product可以产生大量的记录,除非是你有意如此,否则应该加上某种条件限制。

SQL> SELECT name, last_name FROM s_dept, s_emp;

300 rows selected. 其中一个表12行,一个表25行。

三、简单连接查询:

SELECT table.column, table.column...

FROM table1, table2

WHERE table1.column1 = table2.column2;

如:SQL> SELECT s_https://www.wendangku.net/doc/1518624861.html,st_name, s_emp.dept_id,s_https://www.wendangku.net/doc/1518624861.html, FROM s_emp, s_dept

WHERE s_emp.dept_id = s_dept.id;

注意:表前缀的重要性:

SQL> SELECT s_dept.id ”Department ID”,

s_region.id ”Region ID”,

s_https://www.wendangku.net/doc/1518624861.html, ”Region Name”

FROM s_dept, s_region

WHERE s_dept.region_id = s_region.id;

在WHERE 段中,如果没有前缀,两个表中都有ID字段,就显得的模棱两可,AMBIGUOUS。

这在实际中应该尽量避免。

WHERE 字段中,还可以有其他的连接条件,如在上例中,加上:

INITCAP(s_https://www.wendangku.net/doc/1518624861.html,st_name) = ’Menchu’;

再如:WHERE s_emp.dept_id = s_dept.id AND s_dept.region_id = s_region.id AND

s_https://www.wendangku.net/doc/1518624861.html,mission_pct > 0;

四、表别名ALIAS:

1、使用别名进行多表查询。

2、仅在这个查询中生效,一旦用了表别名,就不能再用表的原有的名字进行连接。

实例:

SQL> SELECT https://www.wendangku.net/doc/1518624861.html, ”Customer Name”,

c.region_id ”Region ID”,

https://www.wendangku.net/doc/1518624861.html, ”Region Name”

FROM s_customer c, s_region r

WHERE c.region_id = r.id;

别名最多可以30个字符,但当然越少越好。最好也能容易识别。

五、非等连接

非等连接一般用在没有明确的等量关系的两个表;

最简单的说:非等连接就是在连接中没有“=”出现的连接。

SQL> SELECT e.ename, e.job, e.sal, s.grade

FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;

说明:Create a non-equijoin to evaluate an employee’s salary grade. The salary 必须在另一个表中最高

和最低之间。

其他操作符<= >= 也可以实现,但是BETWEEN是非常简单实用的。

BETWEEN ....AND是指闭区间的,这点要注意,请大家测试。

六、外连接

语法结构:SELECT table.column, table.column

FROM table1, table2

WHERE table1.column = table2.column(+);

实例:

SQL> SELECT https://www.wendangku.net/doc/1518624861.html,st_name, e.id, https://www.wendangku.net/doc/1518624861.html,

FROM s_emp e, s_customer c

WHERE e.id (+) = c.sales_rep_id

ORDER BY e.id;

显示.....,即使有的客户没有销售代表。

* 可以理解为有+号的一边出现了NULL,也可以做为合法的条件。

外连接的限制:

1、外连接符只能出现在信息缺少的那边。

2、在条件中,不能用 IN 或者 OR做连接符。

七、自连接

同一个表中使用连接符进行查询;

FROM 的后面用同一个表的两个别名。

实例:

SQL> SELECT https://www.wendangku.net/doc/1518624861.html,st_name||’ works for ’||

https://www.wendangku.net/doc/1518624861.html,st_name

FROM s_emp worker, s_emp manager

WHERE worker.manager_id = manager.id;

意味着:一个员工的经理ID匹配了经理的员工号,但这个像绕口令的连接方式并不常用。

以后我们会见到一种子查询:

select last_name from s_emp where salary=(select max(salary) from s_emp)

也可以看作是一种变向的自连接,但通常我们将其

==============================================================

课程四组函数

本课重点:

1、了解可用的组函数

2、说明每个组函数的使用方法

3、使用GROUP BY

4、通过HAVING来限制返回组

注意:以下实例中标点均为英文半角

一、概念:

组函数是指按每组返回结果的函数。

组函数可以出现在SELECT和HAVING 字段中。

GROUP BY把SELECT 的结果集分成几个小组。

HAVING 来限制返回组,对RESULT SET而言。

二、组函数:(#号的函数不做重点)

1、AVG

2、COUNT

3、MAX

4、MIN

5、STDDEV#

6、SUM

7、VARIANCE#

语法:

SELECT column, group_function

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[HAVING group_condition]

[ORDER BY column];

实例1:一个混合实例,说明所有问题:

SQL> SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)

FROM s_emp

WHERE UPPER(title) LIKE ’SALES%’;

AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)

----------- ----------- ----------- -----------

1476 152514007380

说明:

很多函数,我们在讲函数的已经向大家介绍过,但在此为何叫分组函数呢,主要是因为它们可以与GROUP

BY来形成对不同组的计算,相当于在很多值中进行挑选。

* MIN MAX函数可以接任何数据类型。

如果是MIN(last_name), MAX(last_name),返回的是什么呢?

千万记住,不是指LAST_NAME的长度,而是指在FIRST字母的前后顺序,第一个相同,然后比较第二个,

如:xdopt

>cssingkdkdk> adopt> acccc

实例2:

SQL> SELECT COUNT(commission_pct)

FROM s_emp

WHERE dept_id = 31;

返回所有非空行个数

三、GROUP BY的应用:

先看一个简单实例:

SQL> SELECT credit_rating, COUNT(*) ”# Cust”

FROM s_customer

GROUP BY credit_rating;

注意这里别名的应用,复习一下从前的课程,加了引号后,就可以用特殊字符,但也仅有三个:#$_,

什么对象的名字都如此。当然空格也是可以的。

复杂实例:

SQL> SELECT title, SUM(salary) PAYROLL

FROM s_emp

WHERE title NOT LIKE ’VP%’

GROUP BY title

ORDER BY SUM(salary);

这里要注意一下几个CLAUSE的先后次序。

WHERE在这里主要是做参与分组的记录的限制。

**另外,如果要选取出来一个不加组函数的列,如上面的TITLE,就要把这个列GROUP BY !否则要出错的!

信息为

:ERROR at line 1:

ORA-00937: not a single-group group function

理论很简单,如果不GROUP BY TITLE,显示哪一个呢?这个在试题中经常出现。

结论:不加分组函数修饰的列必定要出现在GROUP BY 里。

错误实例:

SQL> SELECT dept_id, AVG(salary)

FROM s_emp

WHERE AVG(salary) > 2000

GROUP BY dept_id;

WHERE AVG(salary) > 2000

ERROR at line 3:

ORA-00934: group function is not allowed here

应在GROUP BY 后面加上HAVING AVG(salary) > 2000;

因为是用来限制组的返回。

多级分组实例:

SQL> SELECT dept_id, title, COUNT(*)

FROM s_emp

GROUP BY dept_id, title;

就是先按照DEPT_ID分组,当DEPT_ID相同的时候,再按TITLE分组,而

COUNT(*)以合成的组计数。

顺序对结果有决定性的影响。

总结:本课我们主要学习了分组函数的使用及如何进行分组查询,我们可以想像一下,SQL SERVER中有

COMPUTE BY,来进行分组总数的计算,但在ORACLE中是没有的。大家可以建立

一个有多个列,多个

重复值的表,然后进行各种分组的演示,用得多了,自然明了。

===================================================================== 课程五子查询

本课重点:

1、在条件未知的情况下采用嵌套子查询

2、用子查询做数据处理

3、子查询排序

注意:以下实例中标点均为英文半角

一、概述:

子查询是一种SELECT句式中的高级特性,就是一个SELECT语句作为另一个语句

的一个段。我们可以利

用子查询来在WHERE字段中引用另一个查询来攻取值以补充其无法事先预知的子结果。

子查询可以用在WHERE子句,HAING子句,SELECT或DELETE语句中的

FROM 子句。

注意:1、子查询必须在一对圆括号里。

2、比较符号:>, =, 或者 IN.

3、子查询必须出现在操作符的右边

4、子查询不能出现在ORDER BY里 (试题中有时出现找哪行出错)

二、子查询的执行过程:

NESTED QUERY MAIN QUERY

SQL>SELECT last_name, title FROM s_emp

WHERE dept_id =( SELECT dept_id FROM s_emp WHERE

UPPER(last_name)=’BIRI’)

这里,每个查询只运行一次。当然,子查询要首先被执行,大家设想一下,如果子查询中有一个以上的人

的LASTNAME为BIRI,会如何?-----会出错,因为不能用=来连接。

ORA-1427: single-row subquery returns more than

one row

以上的查询也被称之为单行子查询。

DELECT子查询实例:

delete from new_table where cata_time > to_date('19990901','yyyymmdd') and pro_name=( select pro_name from new_product where pro_addr in ('bj','sh'))

三、子查询中的GROUP 函数的应用

实例 1:

SQL> SELECT last_name, title, salary

FROM s_emp

WHERE salary <

(SELECT AVG(salary)

FROM s_emp);

实例2:

选择出工资最高的员工的家庭住址:

select emp_addr from employees where salary =

(select max(salary) from employees);

这是一个简单实用的例子,可以衍生出很多情况,在实际应用经常出现,请大家多多思考。

实例3:

SQL> SELECT dept_id, AVG(salary)

FROM s_emp

GROUP BY dept_id

HAVING AVG(salary) >

(SELECT AVG(salary)

FROM s_emp

WHERE dept_id = 32);

子查询被多次执行,因为它出现在HAVING 子句中。

SQL> SELECT title, AVG(salary)

FROM s_emp

GROUP BY title

HAVING AVG(salary) =

(SELECT MIN(AVG(salary))

FROM s_emp

GROUP BY title);

对子查询,我们了解这么多在理论上已经覆盖了所有的知识点,对于UPDATE 和DELETE的子查询,不作

为重点,但也要练习掌握。今天到这,谢谢大家。

===================================================================== =

课程六运行时应用变量

本课重点:

1、创建一个SELECT语句,提示USER在运行时先对变量赋值。

2、自动定义一系列变量,在SELECT运行时进行提取。

3、在SQL PLUS中用ACCEPT定义变量

注意:以下实例中标点均为英文半角

一、概述:

变量可以在运行时应用,变量可以出现在WHERE 字段,文本串,列名,表名等。

1、我们这里的运行时,指的是在SQL PLUS中运行。

2、ACCEPT :读取用户输入的值并赋值给变量

3、DEFINE:创建并赋值给一个变量

4、在做REPORT时经常使用,比如对某个部门的销售信息进行统计,部门名称可以以变量代替。

SQL PLUS不支持对输入数据的有效性检查,因此提示要简单且不模棱两可。

二、应用实例:

1、SQL> SELECT id, last_name, salary

FROM s_emp

WHERE dept_id = &department_number;

2、可以在赋值前后进行比较:

SET VERIFY ON

SQL>select * from emp where lastname='&last_name'

输入 last_name 的值:adopt

原值1:select * from emp where lastname='&last_name'

新值1:select * from emp where lastname='adopt'

----如果在原语句中没有单引号,那么在输入值的时候要手工加上单引号。一般字符和日期型要在语句中加

上单引号。

SET VERIFY OFF 之后,原值和新值这两句消失。这在ORACLE8I中是默认为ON。

3、子句为变量:WHERE &condition;要注意引号

三、DEFINE和ACCEPT的应用:

1、SET ECHO OFF //使内容不显示在用户界面

ACCEPT p_dname PROMPT ’Provide the department name: ’

SELECT https://www.wendangku.net/doc/1518624861.html,, r.id, https://www.wendangku.net/doc/1518624861.html, ”REGION NAME”

FROM s_dept d, s_region r

WHERE d.region_id = r.id AND UPPER(https://www.wendangku.net/doc/1518624861.html,) LIKE UPPER(’%&p_dname%’)

SET ECHO ON

存为文件:l7prompt.SQL

SQL> START l7prompt

Provide the department name: sales

2、SQL> DEFINE dname = sales

SQL> DEFINE dname

DEFINE dname = ”sales” (CHAR)

SQL> SELECT name

FROM s_dept

WHERE lower(name) = ’&dname’;

可以正常执行了。

SQL> DEFINE dname主要是显示当前的变量是否赋值,值是什么。当然,我们可以用UNDEFINEGO 来

使变量恢复初始,不然它会一直保持下去。

3、如果变量在SQL SCRIPT文件中确定:可以SQL> START l7param President 来赋值。

总结:本课主要针对较古老的SQLPLUS方法,在REPORT和结果集生成方面使用变量,达到方便操作,

动态修改的目的。

===================================================================== =

课程七其他数据库对象

SEQUENCE

创建实例:

SQL> CREATE SEQUENCE s_dept_id

INCREMENT BY 1

START WITH 51

MAXVALUE 9999999

NOCACHE

NOCYCLE;

Sequence created.

1、NEXTVAL和CURRVAL的用法

只有在INSERT中,才可以作为子查询出现。

以下几个方面不可用子查询:

SELECT子句OF A VIEW

有DISTINCT的出现的SELECT。

有GROUP BY,HAVING,ORDER BY的SELECT子句。

SELECT或DELETE,UPDATE中的子查询。

DEFAULT选项中不能用。

2、编辑SEQUENCE

只有OWNER或有ALTER权限的用户才能修改SEQUENCE

未来的NUMBER受修改的影响。

不能修改START WITH,如果变,则要RE-CREATE。

修改会受到某些有效性检验的限制,如MAXVALUE

3、删除:

DROP SEQUENCE sequence;

ORACLE对象之INDEX

一、INDEX概述:

是ORACLE的一种数据对象,用POINTER来加速查询行。通过快速路径存取方法定位数据并减少I/O。

INDEX独立于表。INDEX由ORACLE SERVER来使用和保持。

二、索引如何建立?

1、自动:通过PRIMARY KEY和UNIQUE KEY约束来建立。

2、用户手工建立非唯一性索引。

三、创建方法:

语法:CREATE INDEX index

ON table (column[, column]...);

何时建立INDEX:

此列经常被放到WHERE字段或JOIN来作条件查询。

此列含有大量的数据。

此列含有大量的空值。

两个或几个列经常同时放到WHERE字段进行组合查询

表很大而且只有少于2-4% 的ROW可能被查询的时候。

以下情况不要建立索引:

表很小;

表被更新频繁。

四、查看已经存在的索引:

1、USER_INDEXES可以查询索引名和类型。

2、USER_IND_COLUMNS包含索引名、表名、列名。

实例:

SQL> SELECT ic.index_name, ic.column_name,ic.column_position col_pos, ix.uniqueness FROM user_indexes ix, user_ind_columns ic

WHERE ic.index_name = ix.index_name

AND ic.table_name = ’S_EMP’;

五、删除索引:

DROP INDEX index;

SYNONYMS 同义词

语法:

CREATE [PUBLIC] SYNONYM synonym for object;

注意:此对象不能包含在一个包里;

一个私有的同义词不能与同一USER的其他对象重名。

DROP SYNONYM D_SUM;

==================================================================== 课程八用户访问控制

本课重点:

1、创建用户

2、创建角色来进行安全设置

3、使用GRANT或REVOKE 来控制权限

注意:以下实例中标点均为英文半角

一、概述:

ORACLE通过用户名和密码进行权限控制。

数据库安全:系统安全和数据安全

系统权限:使用户可以访问数据库

对象权限:操纵数据库中的对象

SCHEMA:各种对象的集合

二、系统权限:

1、超过80个权限可用。

Plsql学习心得

Plsql学习心得 十一、包package 41 11.1什么是package 41 11.2包的组成41 11.3包的优点41 11.4 package声明的语法41 11.5 package body声明的语法42 11.6编译包和包体42 11.7案例42 十二、触发器trigger 44 12.1面临问题44 12.2 DML触发器的组成44 12.3 DML触发器的类型44 12.4 DML触发器的触发顺序44 12.5 DML行级触发器44 12.6 :OLD和:NEW 44 12.7触发器的重新编译46 12.8触发器的状态46 十三、其他注意事项47 13.1 PL/SQL的特点47 13.2写PL/SQL的好处47 13.3命名建议47 13.4搞清楚如下内容47 13.5保证所有对象的状态都是valid 47 13.6 declare中都可声明什么47 13.7数据库对象47 十一、包package 11.1什么是package 1)package(包)是一个可以将相关对象存储在一起的PL/SQL结构。package包含了两个分离的组成部分:specification(package的声明,即包声明)和body(声明中的程序实现,即包体)。每个部分都单独被存储在数据字典中。包声明是一个操作接口,对应用来说是可见的。 2)包体是黑盒,对应用来说隐藏了实现细节。

11.2包的组成 将相关的若干程序单元组织到一块,用一个包来标识这个集合,包中可以包含以下的程序单元: 程序单元描述 过程(procedure)带有参数的程序 函数(function)带有参数的程序,该程序有返回值 变量(variable)用于存储变化值的存储单元 游标(cursor)定义一条SQL语句 类型(type)定义复合类型(record、collection) 常量(constant)定义常量 异常(exception)标识异常 11.3包的优点 1)方便对存储过程和函数的组织: ①将相关的过程和函数组织在一起。②在一个用户环境中解决命名的冲突问题。 2)方便对存储过程和函数的管理: ①在不改变包的声明定义是可以改变包体的实现的。②限制过程、函数的依赖性。 ③在包体未实现时,其他程序中可以调用包中的对象,对自己的程序进行编译,可以并行地对程序开发。 3)方便对存储过程和函数的安全性管理: ①整个包的访问权限只需一次性授权。②区分公用过程和私有过程。 4)改善性能: ①在包被首次调用时作为一个整体全部调入内存。②减少多次调用时磁盘I/O次数。 11.4 package声明的语法 create or replace package pkg_name {is|as} 公共变量(variable)的定义|公共类型(type)的定义| 公共异常(Exception)的定义|公共游标(cursor)的定义| 函数说明|过程说明 end; 11.5 package body声明的语法

PLSQL应用程序开发

Oracle PL/SQL ProGramming 学习笔记 Author:丁俊 目录 序言-特点介绍 (2) PART1 用PL/SQL设计程序 (4) 第一章plsql在10g中的新特性 (4) 第二章建立和运行plsql程序 (6) 第三章plsql语言基本原理 (9) PART2 PL/SQL应用程序结构 (12) 第四章条件和序列控制 (12) 第五章循环控制 (19) 第六章异常处理 (23) PART3 PL/SQL程序应用 (25) 第七章用数据来工作 (25) 第八章Strings (27) 第九章Numbers (31) 第十章Records (36) 第十一章集合类型 (38)

序言-特点介绍 1-1 pl/sql可以做的工作: 1.用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。 2.在数据库中生成和完全地管理xml文档。 3.web页面与数据库的结合。 4.实现自动化的数据库管理,用pl/sql建立安全级别来管理回滚段。 1-2 pl/sql特点: 从oracle 6开始,模仿Ada语言的实现,Ada语言强调数据抽象,信息隐藏,还有其他现代语言设计中的关键策略。pl/sql做为3GL语言具有面向过程语言的许多重要特性,如: 1.丰富的数据类型,从number到string,从复杂的record到table,以及集合类型等。 2.显示的可读性强的块状结构,可以增强我们维护plsql程序。 3.条件,循环语句,包括if---else,3个loop循环(简单loop,for...loop,while...loop)。 4.完整地异常处理机制。 5.命名的,可重用的代码,如包,函数,过程,触发器,对象类型等。 6.plsql是sql的有力补充,与sql之间的联系紧密,整合性强。 7.plsql是oracle数据库产品的内置语言,不是一个孤立的语言。 8.是一种高性能的语言。 9.pl/sql运行过程 Plsql引擎可以接受应用程序的程序,然后将sql部分和plsql部分分离出来,分别交给sql 引擎和plsql引擎执行,提高执行效率。 10.plsql可以每次发送成组的sql语句到服务器端执行,不像sql每次只能发送一句,减少网络负载量,提高效率,而且在oracle的相关工具中,如oracle form中,plsql也得到增强。 11.总结一句话:plsql有应用程序的特性,是sql的有力补充,具有流程控制,申明和使用变量,plsql能运行在任何具有oracle的环境中。

PLSQL developer操作入门级知识讲解

P L S Q L d e v e l o p e r操 作入门级

目录 一 .登录PL/SQL Developer (3) 二 .登录后的基本设置 (4) 2.1 过滤显示 (4) 2.2登录界面的设置 (5) 三 .基本操作 (8) 2.1表的基本操作 (8) 2.1.1 SQL语句建表 (8) 2.1.2 如何在PL\SQL Developer里执行SQL语句 (9) 2.1.3 给表设置主键 (10) 2.1.4 编辑表的字段 (14) 2.1.5 输入条件查询 (15) 2.1.6删除表 (16) 2.1.7编辑表的数据 (17) 2.2视图(View) (19) 2.2.1概念 (19) 2.2.2创建视图 (19) 2.3其它数据库对象 (19) 2.4数据库对象的导出\导入 (20) 2.4.1表的导出 (20) 2.4.2 Dmp导出参数介绍 (23) 2.4.2 表的导入 (24) 四 .其它操作 (27) 1.SQL美化 (27)

一 .登录PL/SQL Developer 1.1 登录PL/SQL Devel oper (1)登录4要素 a. 用户名(username) b. 密码(password) c. 数据库服务名(Database) d. 连接身份(Connect as) (2)要素说明 ●用户名(username)和密码(password):即数据库登录用户和登录密码,由 数据库管理员提供 ●数据库服务名(Database):数据库服务名可在下拉列表中选择(由 tnsnames.ora文件中描述的名字来确定),前提是通过Net Configuration Assistant来配置,或者直接修改tnsnames.ora文件。 ●连接身份(Connect as):若为一般用户,默认为normal即可;若为sys或

oracle学习笔记

●PLSQL控制台输出语句 SET serveroutput ON; --打开控制台输出服务 dbms_output.put_line('values2='||var_val); --输出语句 ●PLSQL动态变量 var_str := '&input'; ●创建表空间和用户 --创建表空间 CREATE TABLESPACE "BCPBS" LOGGING DATAFILE 'D:\app\E430\oradata\orcl\BCPBS_01.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED, 'D:\app\E430\oradata\orcl\BCPBS_02.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; --建立用户 CREATE USER "BCPBS" PROFILE "DEFAULT" IDENTIFIED BY "bcpbs123" DEFAULT TABLESPACE "BCPBS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT "CONNECT" TO "BCPBS"; GRANT "DBA" TO "BCPBS"; GRANT "RESOURCE" TO "BCPBS"; ●删除表空间和用户 drop user bcpbs cascade ; drop tablespace BCPBS including contents and datafiles cascade constraints ; ●自定义函数 CREATE OR REPLACE FUNCTION fun_level_value(level_value number) RETURN number IS return_value number:=null; BEGIN CASE level_value WHEN 0 THEN return_value:='0'; WHEN 1 THEN return_value:='1'; WHEN 2 THEN return_value:='2'; WHEN 3 THEN return_value:='3'; WHEN 6 THEN return_value:='8'; ELSE

实验1 ORACLE基本操作-使用SQL DEVELOPER

实验1 ORACLE 基本操作 实验目的:掌握ORACLE的连接,了解ORACLE的数据库结构;熟悉PLSQL/Developer图形化管理工具的使用。 实验内容: 一、机房环境的准备工作(每次重新启动机器后必做的工作) 为了能启动ORACLE并利用图形化的管理工具PLSQL/Developer对ORACLE数据库进行操作,在机房的机器中要先做如下的准备工作: 1、查看自己的机器名 方法:右击“我的电脑”→“属性”,找到并记住自己的计算机名 2、修改监听程序 方法:“开始”→“所有程序”→“Oracle-OraDb11g_home1”→“配置和移植工具”→“Net Manager”,在弹出的窗口中展开目录至最后的“LISTENER”,在右侧的窗口中将主机名改成自己的主机名→单击窗口右上角的红色叉号按钮关闭→在弹出的对话框中选择“保存”。

3、启动服务 右击“我的电脑”→“管理”→“服务和应用程序”→“服务” 找到并按顺序启动如下两个服务: 。 启动顺序:先启动,再启动 启动方法:右击服务名选择“启动” 注:当在自己的机器上使用时,这两个服务若显示已启动则不用重新再启动。 二、运行SQL Developer,建立与ORACLE数据库的连接 1、运行Oracle自带的SQL Developer软件 方法:“开始”→“所有程序”→“Oracle-OraDb11g_home1”→“应用程序开发”→“SQL Developer” 2、以system用户建立与数据库的连接 在SQL Developer窗口中选中“连接”→点击“新建”按钮,

在窗口中输入以下信息,使其以system用户与数据库进行连接 注: 连接名:可以随便起 用户名:system,若以其他用户身份登录,可以在这里更改用户名 密码:123456 SID:orcl 点击“测试”按钮,若成功则在左下角显示“状态:成功”,若有错误,则会出现红色的提示信息,按信息进行问题查找。 最后点击“连接”按钮进行连接

oracle plsql宝典学习笔记

2015.12.28 1、约束的类型: 主键约束、外键约束、唯一约束、检查约束、非空约束是Oracle数据表的5个约束。 主键约束:用来唯一标识表中一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包括多个列,也称为联合主键。 外键约束:用来约束两个表中列之间的关系。 唯一约束:用来唯一标识表中的列。与主键约束不同的是,在一个数据表中可以有多个唯一约束。 检查约束:用来约束表中列的输入值的范围,比如在输入性别时,要求在数据库中只能输入男或女,就可以使用检查约束来约束该列。 非空约束:约束该列一定要输入值。 2、使用外键约束,应注意以下几个方面问题 如果在foreign key约束的列中输入非NULL值,则此值必须在被引用列中存在;否则,将返回违反外键约束的错误信息。 foreign key约束仅能引用位于同一个服务器上同一个数据库中的表,跨数据库的引用完整性必须通过触发器实现。 foreign key约束可以引用同一个表中的其他列,此行为称为自引用。 列级foreign key约束的references子句只能列出一个引用列,此列的数据类型必须与定义约束列的数据类型相同。 表级foreign key约束的references子句中引用列的数目必须与约束列列表中的列数相同,每个引用列的数据类型也必须与列表中相应列的数据类型相同。在临时表中,不能使用外键约束。 2015.12.30 1、虽然使用DELETE语句和TRUNCATE TABLE语句都能够删除表中的所有数据,但是使用TRUNCATE TABLE语句比使用DELETE语句的执行效率要高。这是因为:使用DELETE语句,系统将一次一行地处理要删除的表中的记录,在从表中删除行之前,在事务处理日志中记录相关的删除操作和删除行中的列值,以便在删除失败时,可以使用事务处理日志来恢复数据。 使用TRUNCATE TABLE语句则一次性完成删除与表相关的所有数据页的操作。另外,TRUNCATE TABLE语句并不更新事务处理日志。因此,使用TRUNCATE TABLE 语句从表中删除行后,将不能用ROLLBACK命令取消行的删除操作。 2016.1.1 1、在实际应用中,使用NOT运算符时,经常忽视其对NULL值的处理问题。要时刻牢记一点,NOT NULL的结果仍为NULL。 2、X IS NULL不可以写成X=NULL;除了IS[NOT] NULL之外,空值不满足任何查找条件;如果NULL参与算术运算,则该算术表达式的值为NULL;如果NULL参与聚集运算,则除count(*)之外其他聚集函数都忽略NULL。 2016.1.2 1、在默认情况下,ORDER BY按升序进行排列,即默认使用的是ASC关键词。如果用户特别要求按降序进行排列,则必须使用DESC关键词。 ORDER BY子句一定要放在所有子句的最后(无论包含多少子句)。 对于时间、数值类型的字段排序,其排序规则就是按照时间的早晚、数值的大小进行的;对于字符型的字段排序,则是依照其ASCII码的先后顺序进行的。

windows 系统应用与维护

Ⅱ戊辰B:windows 系统应用与维护(5%) 4+13+7 单选; 1.Windows将整个计算机显示屏幕看作是()。C A.工作台B.窗口C.桌面D.背景 2.Excel中的工作簿是(D)。 A.一本书 B.一种记录 C.一张表 D. 由工作表组成的文档 3.下面对E-Mail的描述中,只有(d )是正确的。 (A)不能给自己发送E-Mailb (B)一封E-Mail只能发给一个人 (C)不能将E-Mail转发给他人(D)一封E-Mail能发送给多个人 4.从E-Mail服务器中取回来的邮件,通常都保存在客户机的( b)里。 (A)发件箱(B)收件箱(C)已发送邮件箱(D)已删除邮件箱 5、我行网银系统共由多少台设备组成(B) A、30 B、66 C、64 D、13 6、我行网银系统由多少种硬件设备组成(A) A、18 B、17 C、16 D、15 7、我行网银系统网络结构共分多少个区域(C) A、4 B、5 C、7 D、6 8、我行网银系统设计最大寿命为多少年(A) A、8 B、7 C、6 D、5 9、我行网银系统防止暴力破解密码的措施为(A) A、输入5次密码错误以后,系统自动冻结账号一天

B、访问控制列表 C、将账户删除 D、无保护措施 10.以下哪个软件不是信管系统日常开发维护时的常用软件( D ) A.tomcat B.plsql C.myeclipse D.ESET 11.以下哪个是信管系统的正确地址( B ) A.http://16.3.1.75:7001/console B.http://16.3.1.75/credit C.http://16.3.1.75/ICRWeb D.http://16.3.1.75/ECRWeb 12.以下哪个是企业征信系统的正确地址( D ) A.http://16.3.1.75:7001/console B.http://16.3.1.75/credit C.http://16.3.1.75/ICRWeb D.http://16.3.1.75/ECRWeb 13.以下哪个是个人征信系统的正确地址( D ) A.http://16.3.1.75:7001/console B.http://16.3.1.75/credit C.http://16.3.1.75/ICRWeb D.http://16.3.1.75/ECRWeb 14.关于信管系统浏览器配置说法错误的是( D ) A.需要安装ActiveX控件 B.启用下载未签名的ActiveX控件项 C.禁用弹出窗口阻止程序项,并要把网址添加到可信站点中 D.以上说法都是错误的 15.Windows中安装相应的应用软件,通过控制面板中的( C )控件完成。 A、系统B、添加新硬件 C、添加/删除程序D、多媒体 16.在WINDOWSXP中,若鼠标指针变成“I”形状,则表示( D ) A、当前系统正在访问磁盘B、可以改变窗口的大小 C、可以改变窗口的位置D、鼠标指针出现处可以接收键盘的输入 17.不能利用WINDOWSXP资源管理器直接完成的任务是( C ) A、删除文件B、新建文件夹C、对硬盘分区D、复制文件 18.在WINDOWS XP中,使用软键盘可以快速的输入各种特殊符号,为了撤消弹出的软键盘,正确的操作是( A ) A、用鼠标左键单击软键盘上的ESC键 B、用鼠标右键单击软键盘上的ESC键 C、用鼠标右键单击中文输入法状态窗口中的软键盘按钮

PLSQL学习简易快速入门

PLSQL学习简易快速入门 课程一 PL/SQL 基本查询与排序 本课重点: 1、写SELECT语句进行数据库查询 2、进行数学运算 3、处理空值 4、使用别名ALIASES 5、连接列 6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS 7、ORDER BY进行排序输出。 8、使用WHERE 字段。 一、写SQL 命令: 不区分大小写。 SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。 最后以;或 / 结束语句。 也可以用RUN来执行语句 二、例1:SQL> SELECT dept_id, last_name, manager_id FROM s_emp; 2:SQL> SELECT last_name, salary * 12, commission_pct FROM s_emp; 对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。 SQL> SELECT last_name, salary, 12 * (salary + 100) FROM s_emp; 三、列的别名ALIASES: 计算的时候特别有用; 紧跟着列名,或在列名与别名之间加“AS”; 如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。 例(因字体原因,读者请记住:引号为英文双引号Double Quotation): SQL> SELECT last_name, salary, 12 * (salary + 100) ”Annual Salary” FROM s_emp;

四、连接符号:|| 连接不同的列或连接字符串 使结果成为一个有意义的短语: SQL> SELECT first_name || ’’ || last_name || ’, ’|| title ”Employees” FROM s_emp SQL> select divid ||' '|| divname from pub_t_division_test where superid='001' 效果如下图: 五、管理NULL值: SQL> SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMM FROM s_emp; 此函数使NULL转化为有意义的一个值,相当于替换NULL。 select divid,divname,NVL(addr,0) from pub_t_division_test where superid='001' 效果如下图: 六、SQL PLUS的基本内容,请参考 七、ORDER BY 操作: 与其他SQL92标准数据库相似,排序如: SELECT expr FROM table[ORDER BY {column,expr} [ASC|DESC]]; 从Oracle7 release 7.0.16开始,ORDER BY 可以用别名。 另:通过位置判断排序: SQL> SELECT last_name, salary*12 FROM s_emp ORDER BY 2; select * from pub_t_division_test where superid='001'order by3 这样就避免了再写一次很长的表达式。 另:多列排序: SQL> SELECT last name, dept_id, salary FROM s_emp ORDER BY dept_id, salary DESC; SQL>select * from pub_t_division_test where superid='001' order by 1,3 desc

Oracle常见死锁发生的原因以及解决方法

Oracle常见死锁发生的原因以及解决方法 Oracle常见死锁发生的原因以及解决办法 一,删除和更新之间引起的死锁 造成死锁的原因就是多个线程或进程对同一个资源的争抢或相互依赖。这里列举一个对同一个资源的争抢造成死锁的实例。 Oracle 10g, PL/SQL version 9.2 CREATE TABLE testLock( ID NUMBER, test VARCHAR(100) ) COMMIT INSERT INTO testLock VALUES(1,'test1'); INSERT INTO testLock VALUES(2,'test2'); COMMIT; SELECT * FROM testLock 1. ID TEST 2.---------- ---------------------------------- 3. 1 test1 4. 2 test2 死锁现象的重现: 1)在sql 窗口执行:SELECT * FROM testLock FOR UPDATE; -- 加行级锁并对内容进行修改, 不要提交 2)另开一个command窗口,执行:delete from testLock WHERE ID=1; 此时发生死锁(注意此时要另开一个窗口,不然会提示:POST THE CHANGE RECORD TO THE DATABASE. 点yes 后强制commit):

3)死锁查看: 1.SQL> select https://www.wendangku.net/doc/1518624861.html,ername,l.object_id, l.session_id,s.serial#, s.lockwait,s.status,s.machine, s.program from v$session s,v$locked_object l where s.sid = l.session_id; USER NAME SESSION_ID SERIAL# LOCKWAIT STATUS MACHINE PROGRAM 2.---------- ---------- ---------- -------- -------- ---------------------- ------------ 3.SYS 146 104 INACTIVE WORKGROUP\J-THINK PLSQLDev.exe 4.SYS 144 145 20834474 ACTIVE WORKGROUP\J-THINK PLSQLDev. exe 字段说明: Username:死锁语句所用的数据库用户; SID: session identifier,session 标示符,session 是通信双方从开始通信到通信结束期间的一个上下文。 SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。 Lockwait:可以通过这个字段查询出当前正在等待的锁的相关信息。 Status:用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。 Machine:死锁语句所在的机器。 Program:产生死锁的语句主要来自哪个应用程序。 4)查看引起死锁的语句:

ape安装配置手册

A P E X安装简单的说,共分四步:1、安装O r a c l e D B APEX2.2要求Oracle DB版本为9.2.0.3或更高。注意APEX2.2不支持Oracle DB XE,如果你的数据库是Oracle DB XE,就要选用APEX2.1。我这里选用的数据库是Oracle 10.2.0.1,虽然不是目前最高的版本(最高的版本是10.2.0.1的patchset),但是已经包含了很多令人振奋的新特性了。建议 C S D N的朋友们也多使用一些O r a c l e产品的新版本,时刻保持对新技术的敏感度。 O r a c l e D B的免费下载网址为:h t t p://w w w.o r a c l e.c o m/t e c h n o l o g y...r a c l e10g/i n d e x.h t m l 注意:不要用下载的软件从事有任何商业目的的活动。 下载之后开始安装,步骤非常简单。你可以选择在安装的同时创建一个数据库,或者在安装结束后用DBCA 创建一个数据库,最好将数据库的字符集设为AL32UTF8(如果你想让你的数据库支持多种语言,请选用AL32UTF8;否则可以考虑使用一种native本地的字符集,比如ZHS16GBK)。这里我创建了一个service n a m e为t i n a03.c n.o r a c l e.c o m(S I D为t i n a03)的数据库。安装结束后,打开services(服务)窗口,你可以看到里面多了数个oracle的服务,其中包括我们需要的OracleServiceTINA03和OracleOraDb10gTNSListener,其他的服务都可以停掉且设为手动启动。 2、安装O r a c l e H t t p S e r v e r APEX2.2是需要部署到Oracle Http Server上的,它所以能运行主要是依赖于mod_plsql这个模块。下面这三个系列的产品可以满足需要:

精通 oracle 10g plsql 编程-学习笔记

1.PL/SQL综述 本章学习目标,了解如下内容: PL/SQL的功能和作用 PL/SQL 的优点和特征; Oracle 10g、Oracle9i 的PL/SQL新特征 1.1.SQL简介 1.1.1.SQL语言特点 SQL语言采用集合操作方式 1.1. 2.SQL语言分类 ●数据查询语言(SELECT语句):检索数据库数据。 ●数据操纵语言(DML):用于改变数据库数据。包括insert,update和delete三条语句。 ●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三 条语句 ●数据定义语言(DDL):用户建立、修改和删除数据库对象。 ●数据控制语言(DDL):用于执行权限授予和收回操作。包括grant 和revoke两条命令。 1.1.3.SQL 语句编写规则 ●SQL关键字不区分大小写 ●对象名和列名不区分大小写 ●字符值和日期值区分大小写 ●书写格式随意 1.2.PL/SQL简介 1.3.Oracle 10G PL/SQL 新特征 2.PL/SQL开发工具 本章学习目标: 学会使用SQL*PLUS 学会使用PL/SQL developer; 学会使用Procedure Builder。 2.1.SQL*PLUS 在命令行运行SQL*Plus

Sqlplus [username]/[password] [@server] 3.PL/SQL 基础 学习目标: ●了解PL/SQL块的基本结构以及PL/SQL块的分类; ●学会在PL/SQL块中定义和使用变量 ●学会在PL/SQL块中编写可执行语句; ●了解编写PL/SQL代码的指导方针; ●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和 BINARY_DOUBLE,以及指定字符串文本的新方法。 3.1.PL/SQL 块简介 3.1.1.PL/SQL块结构 3.1.2.PL/SQL 块分类 匿名块 命名块 子程序 触发器 3.2. 定义并使用变量 3.2.1.标量变量 3.2.2.复合变量 3.2.3.参照变量 3.2. 4.LOB 变量 3.2.5.非PL/SQL 变量

PLSQL学习(一) 基础知识

PLSQL学习(一) 基础知识 很久以前自己整理的PLSQL一些基础知识,翻出来看看都是比较基础的内容,还是放上来好了。参考的资料是《PL/SQL用户指南与参考》中译版,觉得这是一部很不错的入门书,感谢把这本书翻译出来的网友。 1、乘方的不同应用: 在SQL中乘方只能使用函数Power(a,b)来计算 但在PLSQL中可直接使用a**b表示 2、赋值语句Returning: insert into t1 values(90,'SERVICE','BEIJING') Returning rowid,name into row_id,info; 注:只限insert、update、delete一条记录时进行赋值 3、自定义参数——&: 可SQL和PLSQL中均可使用自定义参数,即需要自己输入值的参数 select * from ldcom where comcode=&a andname=&b; PLSQL: declare i int := &a; n int := &b; 4、绑定变量的使用: 可使用绑定变量的办法提高SQL效率 SQL> variable x number ; SQL> exec :x := 8600 ; SQL> select * from ldcom where comcode= :x ; 注:PLSQL中的declare即隐士绑定,无需再申明

可用Print查看绑定变量 SQL> print x; 也可使用查询SQL> select :x from dual; 实际的简单应用: variable x number; declare v_date date; begin for i in1.. 10loop :x := i; select sysdate+:x into v_date from dual; dbms_output.put_line(v_date); end loop; end; / 在execute immediate中的应用: declare v_x t1.num%type; begin execute immediate'update t1 set num=8888 where id=:a returning num into :b' using2returning into v_x; dbms_output.put_line(v_x); end; 注意returning的返回值在动态SQL中的操作格式 5、%TYPE和%ROWTYPE的区别: %TYPE针对某一字段类型(数组也是单一的类型) %ROWTYPE针对某一整表的类型(游标也是整表)

PLSQL怎么执行SQL语句

通过f5查看到的执行计划,其实是pl/sql developer工具内部执行查询 plan_table表然后格式化的结果。 select * from plan_table where statement_id=...。其中 description列描述当前的数据库操作, object owner列表示对象所属用户, object name表示操作的对象, cost列表示当前操作的代价(消耗),这个列基本上就是评价sql语句的优劣,cardinality列表示操作影响的行数, bytes列表示字节数篇二:plsqldeveloper工具使用教程 plsql入门 pl/sql的概述 pl/sql的优势 pl/sql是一种块结构的语言,允许你将业务逻辑封装在一起,这是到目前为止使用pl/sql的最大优势 pl/sql是在服务器上运行,可以与数据库和sql引擎直接进行交互, pl/sql是什么? (procedural language/sql) 是oracle在标准的sql语言上的扩展,pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用列外处理各种错误,这样使得它的功能变得更加强大。 特性: 减少java程序的复杂性 一.过程,函数,触发器是pl/sql编写的 二.过程、函数、触发器是在oracle中 三. pl/sql是非常强大的数据库过程语言 四.过程,函数可以再java程序中调用 为什么学? a) 提高应用程序的运行性能 b) 模块化的设计思想[分页的过程,订单的过程,转账的过程] c) 减少网络传输量(传统的方法,用sql语句传输!现在就只需要调用存储过程) d) 提高安全性(传统sql 可以看到表名字段等…) 不好: 移植性不好,(你写好的存储过程,函数等当我们要换数据库时,这些东西就没用了)开发工具: 1. sqlplus 开发工具 是oracle公司提供的一个工具,这个因为我们在以前介绍过: 2. pl/sql developer开发工具 pl/sql developer是用于开发pl/sql块的集成开发环境(ide) 它是一个独立的产品,而不是oracle的一个附带品, createprocedure sp_pro1//存储过程名字 is begin ---执行部分 insert into mytest values(‘’,’’); end; / 查看错误信息

Oracle11g自带的SQL developer无法打开解决方案

在安装完Oracle Database 11g Release 2数据库,想试一下Oracle自带的SQL Developer 工具,在操作系统菜单的所有程序中找到SQL Developer如下所示,并单击: 结果却提示缺少快捷方式,没找到“SQLDEVELOPER.BAT”,如下所示:

在Oracle的安装目录 D:\DataBaseInstall\Oralce_11g_r2\product\11.2.0\dbhome_1\sqldeveloper\sqldeveloper\ bin下的确也没找到sqldeveloper.bat文件。网上很多人都说重新下载SQL Developer替换掉安装Oracle时自带的那个。 重新到Oracle官网下载SQL Developer,当前最新版下载地址: https://www.wendangku.net/doc/1518624861.html,/otn/java/sqldeveloper/sqldeveloper64-3.2.20.09.87-no-jre.zip 将下载下来的sqldeveloper64-3.2.20.09.87-no-jre.zip解压到Oracle安装目录下

这时重新单击操作系统菜单中的“SQL Developer”,看到命令窗口闪一下就消失了。看了一下SQL Developer的“readme.html”文档知道了SQL Developer 3.2支持的Java版本至少要1.6.0_04。

那就下载当前最新JDK安装,在这里我下载的是 jrockit-jdk1.6.0_37-R28.2.5-4.1.0-windows-x64.exe。下载完成后双击出现如下安装界面:

查询oracle表空间路径

ORACLE查看表空间路径、当前用户的表空间等 查看当前用户每个表占用空间的大小: Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 查看每个表空间占用空间的大小: Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name 查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词,存储过程函数,约束条件)0、表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 查看用户下所有的表 SQL>select * from user_tables; 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 显示当前会话所具有的权限 SQL>select * from session_privs; 显示指定用户所具有的系统权限

oracle-database-11g-plsql-编程实战笔记

Chap1 DML语句是select 、insert、update、delete和merge DDL语句是create、alter、drop、rename、truncate、comment DCL语句是grant、revoke TCL语句是commit、rollback和savepoint sql16个基本命令——参考书《OCA认证考试指南(IZ0-051)》清华大学出版社 《oracle database sql language reference 11g》有非遵循格式字符串依赖于格式掩码 chap2 2.1.3 关于语句中有多个单引号时处理: 1、 select'It''s a bird,no plan can''t be 'as pharse from dual; 此处两个单引号即为一个单引号 2、只能用q 再加’(语句)’ select q'(It's a bird,no plan can't be)'as pharse from dual; 均输出 PHARSE ---------------------------- It's a bird,no plan can't be 2.1.4 定义变量与申明变量的区别: 定义变量即为变量分配名称并指定数据类型;申明变量首先需要定义变量,然后为其赋值。(赋值也称为初始化) 替代变量前面要加&前缀且若替代变量为字符型时要加两个单引号如’&a’ declare lv_whom varchar2(20);/*lv-whom为申明变量,a为替代变量,a没有变量类型*/ begin lv_whom := '&a'; end; 或者 declare lv_whom varchar2(20); begin lv_whom := &a; end;但是要在输入框中字符加两个单引号 替代变量用define申明,且定义时不可以指定类型,默认为char型 ①Define x=emp; Select * from &x; /*调用要用&,此处不加单引号,解析后即为emp表*/

PLSQL 快捷键设计以及添加快捷键

PL/SQL 快捷键 1 修改Code assistant快捷键 tools->preferences->User Interface -> Key Configuration -> tools/ code assistant 改为自己想要的快捷键 tools -> code assistant 可以查看帮助的快捷键 2 修改Sql 语句大小写 默认pl/sql 没有提供快捷键 选中sql,点击edit --> selection --> Uppercase 当然了也可以按照1来增加快捷键 tools->preferences->User Interface -> Key Configuration --> edit/selection/Uppercase 改为自己想要的快捷键 使用PL/SQL中经常性需要输入select * from 这样类似的语句。能不能配置一个快捷键,比如输入s,直接就显示select * from 呢?显然PL/SQL是支持该功能的。 在PL/SQL的安装目录下面:$:\Program Files\PLSQL Developer\PlugIns 中添加一个文本文件,比如命名为:shortcuts.txt。文本文件中填写如下内容: s = select * from 打开PL/SQL,在Tools->Perferences->Editor中Autoreplaces选择配置的shortcuts文件。如下图:

确定后重启PL/SQL就可以了。在编辑页面,输入s 就会显示select * from 附录:个人编写文件内容: s=select * from ; st = select t.* ,t.rowid from t ; sf = select a.* from a ; d = delet e from where ; u = update a set a. where a. ; w = where ; dbs=dbms_output.put_line('); 应用时,快捷键+回车就可以出现了!

相关文档
相关文档 最新文档