ORACLE之SQL基础SQLPLUS基础
oracle11g的基本SQL语句和函数

GROUP BY
首先创建表
create table 成绩(sno number, km varchar2(13), score number); Insert into 成绩 values(1,‟语文’,60); Insert into 成绩 values(1,‟数学’,60); Insert into 成绩 values(1,‟英语’,60); Insert into 成绩 values(2,‟语文’,70); Insert into 成绩 values(2,‟数学’,70); Insert into 成绩 values(3,‟英语’,89); commit;
插入空值
Insert into student values(3,null, to_date(„19980311‟,‟yyyy-MMdd‟)); hh mm ss
insert into student(sno,birthday) values( 4,to_date('19880601','yyyy-MM-dd'));
月、日,小时、分钟、秒 数值数据类型的声明语法: 主要的日期时间类型有:
NUMBER [( p[, s])] DATE - 存储日期和时间部分,精确到整个的秒 P表示精度,S表示小数点的位数 TIMESTAMP - 存储日期、时间和时区信息,秒值精 确到小数点后6位 Select sysdate from dual; Select to_char(sysdate,‟yyyymmdd hh24:mi:ss‟) from dual; Select to_char(sysytimestamp,‟yyyymmdd hh24:mi:ssxff6‟) from dual;
Oracle数据库基本知识

Oracle数据库基本知识Oracle数据库基本知识Oracle Database,又名OracleRDBMS,或简称Oracle。
是甲骨文公司的一款关系数据库管理系统。
本文为大家分享的是Oracle数据库的基本知识,希望对大家有所帮助!它是在数据库领域一直处于领先地位的产品。
可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。
它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。
介绍ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。
比如SilverStream 就是基于数据库的一种中间件。
ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为OracleDatabase 12c。
Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。
此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。
这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。
就业前景从就业与择业的角度来讲,计算机相关专业的大学生从事oracle 方面的技术是职业发展中的最佳选择。
其一、就业面广:ORACLE帮助拓展技术人员择业的广度,全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位,大学生在校期间兴趣广泛,每个人兴趣特长各异,不论你想进入金融行业还是电信行业或者政府机构,ORACLE都能够在你的职业发展中给你最强有力的支撑,成为你最贴身的金饭碗。
plsql + 的用法

plsql + 的用法==========PlSql,全称为PL/SQL,是Oracle数据库中一种常用的编程语言。
本篇文章将详细介绍PlSql的用法,包括其基本语法、开发环境设置、常用函数和语句等。
一、基本语法-----PlSql的基本语法包括声明、赋值和执行语句。
以下是一个简单的PlSql程序示例:```sqlDECLAREv_name VARCHAR2(50);v_age NUMBER;BEGINv_name := '张三';v_age := 25;DBMS_OUTPUT.PUT_LINE('姓名: ' || v_name || ', 年龄: ' || v_age);END;```上述代码中,我们声明了两个变量v_name和v_age,并分别赋值为字符串和数字类型。
然后使用DBMS_OUTPUT.PUT_LINE语句输出结果。
在PlSql中,可以使用Oracle提供的输出函数来输出变量的值。
二、开发环境设置要编写和运行PlSql程序,需要安装Oracle数据库客户端,并配置开发环境。
具体步骤如下:1. 安装Oracle数据库客户端,并确保数据库服务已启动。
2. 打开Oracle SQL Developer或其他Oracle数据库管理工具。
3. 创建一个数据库连接,并选择要使用的数据库。
4. 在工具中打开一个新的PlSql编辑器窗口或创建一个新的PlSql文件。
三、常用函数和语句---------PlSql提供了许多内置函数和语句,用于处理数据、执行操作和生成结果。
以下是一些常用的函数和语句:* 数据类型转换函数:TO_CHAR、TO_NUMBER等。
* 字符串操作函数:SUBSTR、LENGTH、REPLACE等。
* 日期操作函数:YEAR、MONTH、DAY等。
* 控制语句:BEGIN...END、LOOP、WHILE、CASE等。
* 异常处理语句:EXCEPTION、RAISE等。
sqlplus 编译package 语句

SQL\*Plus 是 Oracle 数据库系统中用于执行 SQL 语句和存储过程的命令行工具。
在SQL\*Plus 中编译package 语句是非常常见的操作,本文将介绍如何在 SQL\*Plus 中编译 package 语句。
编译 package 语句的基本步骤如下:1. 连接到数据库首先需要使用 SQL\*Plus 命令行工具连接到数据库。
可以使用以下命令进行连接:```sqlplus username/passwordhost:port/servicename```其中,username 是数据库用户名,password 是密码,host 是数据库主机名,port 是数据库端口号,servicename 是数据库服务名。
连接成功后,会出现SQL\*Plus 的提示符,表示已经成功连接到数据库。
2. 编写 package 语句在 SQL\*Plus 中,可以使用任意文本编辑器编写 package 语句。
可以使用 vi 或 Notepad++ 等编辑器编写 package 语句。
package 语句通常包括 package 头和 package 主体两部分,可以分别编写并保存到文件中。
3. 载入 package 文件在 SQL\*Plus 中使用以下命令载入 package 文件:```package_file_name.sql```其中,package_file_name.sql 是 package 文件的文件名。
载入成功后,SQL\*Plus 会显示已经载入的文件名,并提示已经成功加载package 文件。
4. 编译 package 语句一旦 package 文件被载入到 SQL\*Plus 中,可以使用以下命令编译package 语句:```ALTER PACKAGE package_name COMPILE;```其中,package_name 是 package 文件中定义的 package 名称。
sqlplus -s用法

sqlplus -s用法
sqlplus是Oracle数据库的交互式命令行工具,-s选项是其中的一个参数,表示“静默模式”。
使用-s选项可以在执行sqlplus
命令时,不显示启动和退出信息,只显示查询结果。
这在需要在脚
本或者批处理中执行SQL语句时非常有用,可以避免额外的输出干扰。
举例来说,假设我们有一个脚本文件test.sql包含SQL查询语句,我们可以使用以下命令来执行该脚本并在静默模式下输出结果:
sqlplus-susername/password@*****************.
这样就会在不显示额外信息的情况下执行test.sql中的SQL语句,并将查询结果输出到标准输出。
需要注意的是,-s选项并不会隐藏错误信息,所以在实际使用中,仍然需要对SQL语句的执行结果进行适当的错误处理。
总之,sqlplus -s选项的主要作用是在执行SQL语句时以静默
模式输出结果,适用于需要在脚本或者批处理中执行SQL查询的场景。
Oracle培训之:sql优化--

13
在SQLPLUS 配置AUTOTRACE
AUTOTRACE 参数
SET AUTOTRACE OFF SET AUTOTRACE ON EXPLAIN SET AUTOTRACE ON STATISTICS SET AUTOTRACE ON SET AUTOTRACE TRACEONLY
解
释
不能获得AUTOTRACE报告. 这是默认的. 仅仅显示优化器执行计划的AUTOTRACE 报告 仅仅显示SQL语句执行的统计结果的 AUTOTRACE报告 包括上面两项内容的AUTOTRACE报告 与SET AUTOTRACE ON类似,所有的统计 和数据都在,但不可以打印
23
第五章:SQL重编译问题
SQL共享原理 SQL共享的三个条件 PROC程序的SQL共享 PROC程序中以下类型的语句不需进行变量 绑定 • PROC程序的CLIENT参数 • 存储过程的SQL共享 • SQL共享的数据库参数的利弊
24
• • • •
SQL共享原理
• ORACLE将执行过的SQL语句存放在内存 的共享池(shared buffer pool)中,可以被所 有的数据库用户共享 • 当你执行一个SQL语句(有时被称为一个游 标)时,如果它和之前的执行过的语句完全相 同, ORACLE就能很快获得已经被解析的语 句以及最好的 执行路径. 这个功能大大地提 高了SQL的执行性能并节省了内存的使用
查找原因的步骤(四)
• 是否为表和相关的索引搜集足够的统计数 据。对数据经常有增、删、改的表最好定 期对表和索引进行分析,可用SQL语句 “analyze table xxxx compute statistics for all indexes;”。ORACLE掌握了充分反映实 际的统计数据,才有可能做出正确的选择 • 索引列的选择性不高 (字段值重复率高)
plsql使用技巧
plsql使用技巧PL/SQL是Oracle数据库的一种编程语言,可以用于编写存储过程、触发器、函数等程序。
本文将从以下几个方面介绍PL/SQL的使用技巧:一、变量和常量的使用1.1 变量的定义在PL/SQL中,可以使用DECLARE语句来定义变量。
例如:DECLAREv_name VARCHAR2(100);BEGINv_name := 'John';END;1.2 常量的定义在PL/SQL中,可以使用CONSTANT关键字来定义常量。
例如:DECLAREc_pi CONSTANT NUMBER := 3.1415926;BEGINNULL;END;1.3 变量和常量的命名规则在PL/SQL中,变量和常量的命名规则与其他编程语言类似。
变量和常量的名称必须以字母开头,并且只能包含字母、数字和下划线。
二、条件语句的使用2.1 IF语句IF语句用于根据条件执行不同的代码块。
例如:DECLAREv_age NUMBER := 18;BEGINIF v_age >= 18 THENDBMS_OUTPUT.PUT_LINE('You are an adult.');ELSEDBMS_OUTPUT.PUT_LINE('You are a minor.');END IF;END;2.2 CASE语句CASE语句用于根据不同情况执行不同代码块。
例如:DECLAREv_day_of_week NUMBER := 5;BEGINCASE v_day_of_weekWHEN 1 THEN DBMS_OUTPUT.PUT_LINE('Monday');WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('Tuesday');WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('Wednesday'); WHEN 4 THEN DBMS_OUTPUT.PUT_LINE('Thursday'); WHEN 5 THEN DBMS_OUTPUT.PUT_LINE('Friday');ELSE DBMS_OUTPUT.PUT_LINE('Weekend');END CASE;END;三、循环语句的使用3.1 FOR循环FOR循环用于执行一组代码块一定次数。
plsql使用教程
plsql使用教程PL/SQL是Oracle数据库的过程式编程语言,它结合了SQL的强大查询能力和程序设计语言的灵活性。
以下是一个简单的PL/SQL使用教程:1. 定义变量在PL/SQL中,可以使用DECLARE语句来定义变量。
例如:DECLAREnum INTEGER;name VARCHAR2(50);2. 使用SELECT查询数据可以使用SELECT语句从表中检索数据。
例如:SELECT * INTO num, name FROM employees WHERE employee_id = 100;3. 使用IF-THEN-ELSE进行条件判断PL/SQL提供了IF-THEN-ELSE语句来进行条件判断。
例如:IF num > 0 THENDBMS_OUTPUT.PUT_LINE('Number is positive');ELSEDBMS_OUTPUT.PUT_LINE('Number is negative');END IF;4. 使用FOR循环可以使用FOR循环来对一个集合进行迭代。
例如:FOR i IN 1..10 LOOPDBMS_OUTPUT.PUT_LINE('The value of i is: ' || i);END LOOP;5. 创建存储过程可以使用CREATE PROCEDURE语句来创建存储过程。
例如:CREATE PROCEDURE get_employee_details (p_employee_idIN NUMBER) ISv_employee_name VARCHAR2(50);BEGINSELECT employee_name INTO v_employee_name FROM employees WHERE employee_id = p_employee_id;DBMS_OUTPUT.PUT_LINE('Employee name is: ' ||v_employee_name);END;6. 调用存储过程可以使用EXECUTE语句来调用存储过程。
Oracle+PLSQL语句大全
--修改表的内容 DDLselect*from emp;--使用insert添加行insert into emp(ename,job,empno)values('WANGYI','DBA','2000');commit;--忽略列的的列表insert into emp values(3000,'ZHANG','DBA',1000,to_date('1990-07-15','yyyy-mm-dd'),2000,null,10); commit;--为列指定空值insert into emp values(3001,'ZHANG1','DBA',1000,to_date('1990-07-15','yyyy-mm-dd'),null,null,null); rollback;--在列值中使用单引号和双引号单引号里面的双引号表示单引号,例如插入 O’nal insert into emp(ename,empno)values('O''nal',2222);--复制一个表create table emp2 as select*from emp ;truncate table emp2;--从一个表向另外一个表复制行insert into emp2(empno,ename,sal)select empno,ename,sal from emp where empno=7369;rollback;insert into emp2 select*from emp where empno=7369;--使用update修改行update emp set ename='KKKK'where ename='WANGYI';--如果有两个WANG则两个都修改COMMIT;--returning 子句variable sk numberupdate emp set sal=3000where ename='KKKK'returning avg(sal)into: sk;----有问题--使用delete 删除行delete from emp where ename='KKKK';commit;--jdbc_lobselect*from emp;drop table JDBCTEST;SELECT*FROM jdbct1;alter table jdbct1 add(comm number(10));alter table jdbct1 drop(comm);--包:规范+包体--创建包规范create or replace package emp2_package as --指定包的用户可以使用的过程和函数的列表(同时包括变量,类型定义,游标)function func_sum(n number,m number) return number ;end emp2_package;--创建包体create or replace package body emp2_package as --实现声明中的方法 function func_sum(n number, m number) return number assums number;beginsums:=n+m;return sums;end func_sum;end emp2_package;--调用包中的函数和过程select emp2_package.func_sum(1,2) from dual;--获取包中函数和过程的信息select * from user_procedures ;--删除包drop package emp2_package;--触发器--创建触发器(简单的)create or replace trigger trigger_testbefore insert on emp2for each row when (new.sal>10000) --行级触发器begin-- raise_application_error('-20011','工资不能超过1W!');dbms_output.put_line('工资不能超过1W!');end trigger_test;--测试触发器insert into emp2(empno,ename,sal) values (9527,'gggg',11111);--创建触发器create or replace trigger trigger_test3after insert or update of sal on empfor each row when (new.sal>old.sal*0.75)begin--update emp set sal=:old.sal;dbms_output.put_line(:old.sal);end trigger_test3;--创建触发器(insert)create or replace trigger trigger_2before insert or update on empfor each row when (new.sal<100)begininsert into emp(empno,ename,sal) values(1111,'tttttt',:new.sal*10);end;--测试触发器insert into emp(empno,ename,sal) values(2312,'rrrr',1000);update emp set sal=9999 where ename='rrrr';select * from emp;select * from dual;--dual是oracle 中的一张虚表,用于测试函数用--大小写转换select upper('abc') from dual; --转换为大写select upper(DUMMY) from dual;select lower(DUMMY) from dual; --转换为小写select lower(dummy) from dual; --字段不区分大小写select initcap('this is a test') from dual; --单词首字母大写--字符操作select concat('aaa', 'bbb') from dual; --连接两个字符串select 'aaa' || 'bbb' from dual; --也可以用||连接字符串select substr('abcdef', 3) from dual; --拆分字符串。
SQLPLUS的使用
SQL*PLUS的启动和使用1.SQL*PLUS的启动在UNIX平台下,登录用户的.profile文件(或者.login)文件中要配置了有关Oracle数据库的信息。
形如下例所示:DISPLAY=IPADDRESS:0.0ORACLE_HOME=/usr/oracle/app/oracle/product/8.1.6PATH=$ORACLE_HOME/bin:/usr/bin:/etc:/usr/ccs/bin:/usr/bin/X11:/usr/local/bin:$PATH:.NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16cgb231280'ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataORACLE_SID=o816LD_LIBRARY_PA TH=$ORACLE_HOME/lib:/usr/libexport DISPLAY ORACLE_HOME PATH NLS_LANG ORA_NLS33 ORACLE_SID LD_LIBRARY_PA TH这样就可以使用SQL*PLUS了。
SQL*PLUS的启动输入有几种方式。
1.1快速启动这种方式直接在命令行敲入所有的参数,不用提示。
Host>sqlplus UserName/passwd@RemoteDatabaseName其中:UserName是数据库系统管理员分配给你的用户名,passwd则是对应的密码。
RemoteDatabaseName则是远端数据库的名字,若你想在本地终端上连接远端数据库时,就需要加上这一项,若只是连接本地数据库,则只需UserName和passwd就足够了。
RemoteDatabaseName应该是db_domain和db_name组成的,但在香港,因为我们用了复制,所以用global_name做为各个数据库的名字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE之 SQL基础 SQL*PLUS基础 QQ:1084931388 SQL与SQL*PLUS命令 SQL:在Oracle数据库中创建(表、视图、索引等)、存储、改变(结构、数据)和维护信息;
SQL命令存放在SQL缓冲区内,保持到下一条SQL命令进入缓冲区,并以―;‖(分号)结尾。
SQL命令有如下特点:
1. 简单、易读、功能强大,是Oracle各种开发工具的基础 2. 与终端用户进行交互能力强 SQL*Plus概述 SQL*PLUS工具的作用
ORACLE 的SQL 和PL/SQL的运行环境
数据库进行操作和管理
输入、编辑、存储、提取和运行SQL命令和PL/SQL程序
处理数据、生成报表、存储、打印和格式化查询结果
在SQL数据库之间存取和拷贝数据
从一个用户端发送消息和接受消息
与SQL的区别:①不进入SQL缓冲区
②不用―;‖(分号)结尾 启动SQL*Plus
命令行方式启动SQL*PLUS
图形界面方式启动SQL*Plus
启动SQL*Plus 命令行方式启动SQL*PLUS
sqlplus [username]/[password] [@connect_string]|[NOLOG]
图形界面方式启动SQL*PLUS
退出SQL*PLUS:SQL>exit
父表dept SQL> select * from dept;
DEPTNO DNAME LOC
--------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Emp子表 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- -------- --------- ----- --------- ---- ---- ------ 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected.
SQL*PLUS基础 SQL命令的组成
数据定义语言(DDL):creat(建立)drop(删除) alter(修改表结构)rename(改名) 数据操纵语言(DML):select(查询)insert(插入) delete(删除)update(更新) 数据控制语言(DCL):grant(授权)revoke(回收) 数据检索语言(SELECT) 事务处理控制命令:包括:commit(提交)、rollback(回退)savepoint(设置保存点), 练习 什么是S Q L?S Q L有什么功能?
下列哪个语句可以从数据库中取得数据?
A. select B. update C. insert D. delete
3. 指出S Q L数据控制语言(D C L)中的命令。
4. 指出S Q L数据操纵语言(D M L)中的命令。
5. 指出S Q L数据定义语言(D D L)中的命令。
ORACLE的数据类型 下列代码演示了两者最重要的差别:
SQL> create table tester
2 (col1 char(10), col2 varchar2(10));
SQL> insert into tester values ('BRADY','BRADY');
SQL> select vsize(col1), vsize(col2) from tester; VSIZE(COL1) VSIZE(COL2)
----------- -----------
10 5
ORACLE的数据类型 3. number(w,d)型—数值型 存放数值型数据,w代表总位数(1—38位),d代表小数点后的位数 number 1234567.89 number(9) 1234568 1234567.89 number(9,2) 1234567.89 number(9,1) 1234567.9 number(7) 1234568 number(7,-1) 1234570 ORACLE的数据类型 插入的值超过允许位数时,只要超出的位数在小数点后面,O r a c l e总是对其四舍五入。
如果超出的位数在小数点前面,则O r a c l e返回错误。
SQL> create table tester22 (col1 number(15,2));
SQL> insert into tester values (1234567891011);
1 row created.
SQL> insert into tester values (12345678910111); *ERROR at line 1:
ORA-01438: value larger than specified precision allows for this column
SQL> insert into tester2 values (1234567891011.121)
1 row created.
ORACLE的数据类型 4. date型—日期型 用于存放日期,范围从公元前4712年的1月1日到公元后4712年12月31日。采用一种用七位数字表示日期时间的Julian date(儒略日)存储方式。
儒略日有如下优点:①可进行日期计算②可进行有效性检查③有利于正确排序④能存储时间
date型的缺省格式为:DD-MON-YY (如19-Apr-02)
ORACLE的数据类型 6. 多媒体数据类型 ⑴lob:用于存储无组织的大的文本文档、静态图像、音频、视频等多媒体信息,最大长度为4GB。分为以下几种: ⑵clob:存储文本、字符等大对象 ⑶blob:存储二进制的大对象,最大长度为4GB ⑷bfile:存储指向数据库之外,由操作系统管理的巨型对象的指针。BFILE类型数据的文件,可以存储在硬盘上,也可以在CD或DVD上。 其中:BLOB、CLOB属于内部LOB类型,存储在数据库的表空间里,一个内部LOB数据的长度如果小于4000字节,存储在表的记录中;超过4000字节,自动移出表外单独存储。但无论存在何处,都有一个LOB定位器(指向存储LOB数据实际位置的指针)存于表中的LOB列里。BFILE属于外部LOB类型,BFILE数据是只读的。 注:一个表中可以有多个多媒体数据类型,解除了long型的限制;一个表可以在列中存储定位指针,而不存储真的句型对象本身。
练习 1. SALES表中的PROFITS列声明为NUMBER(10,2)。下列哪个值无法在这个列中存储?
A.5392845.324 B.871039453.1 C.75439289.34 D. 60079829.25 2. 员工KING于1981年11月17日招聘,你对Oracle数据库发出下列查询:select vsize(hiredate) from emp where ename = ‗KING‘。下列哪个选项是返回的值? A. 4 B. 7 C. 9 D. 17 SALES 表中将PRODUCT_NAME列定义为CHAR ( 40 )。后面要在表中增加一行,PRODUCT_NAME值为―CAT_TOYS‖。然后发出下列命令:
select vsize (product_name) from sales。哪个选项是返回的值?A. 8 B. 12 C. 40 D. 4000