大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.在sql*plus下按回车不行是因为你在sql语句结束时没有以;(分号)结尾,以分号结尾再按回车就可以了
专注于为中小企业提供网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业呼和浩特免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
2.如果常用的话,建议使用pl/sql
developer,功能强,易使用
Oracle执行外部文件:
c:sqlplus
user/pwd@db
sql@new.sql
执行多个sql文件:
1.把所有的文件都放在同一个目录下,然后在命令行里执行命令:
c:dir/b
d:/1.sql
会把所有的sql文件名都输出到一个sql文件中。
2.用UltraEdit打开生成的sql文件,alt+C切换到column
mode,给所有的行前都添加一个"@",保存。
3.在sqlplus中执行"@d:/1.sql"
如何避免''字符:
sql中可以传递参数,但有时需要插入'',例:
SQL
select
'hello'
v
from
dual;
输入
hello
的值:
hello
原值
1:
select
'hello'
v
from
dual
新值
1:
select
'hello'
v
from
dual
v
-----
hello
可以使用如下方法避免:
A:
SQL
select
chr(38)
||
'hello'
v
from
dual;
V
------
hello
B:
SQL
set
define
off
SQL
select
'hello'
v
from
dual;
V
------
hello
一。 概述Oracle存储过程开发的要点是:
1; 使用Notepad文本编辑器,用Oracle PL/SQL编程语言写一个存储过程;
2; 在Oracle数据库中创建一个存储过程;
3; 在Oracle数据库中使用SQL*Plus工具运行存储过程;
4; 在Oracle数据库中修改存储过程;
5; 通过编译错误调试存储过程;
6; 删除存储过程;二。环境配置
包括以下内容:
1; 一个文本编辑器Notepad;
2; Oracle SQL*Plus工具,提交Oracle SQL和PL/SQL 语句到Oracle database。
3; Oracle 10g express数据库,它是免费使用的版本;
需要的技巧:
4; SQL基础知识,包括插入、修改、删除等
5; 使用Oracle's SQL*Plus工具的基本技巧;
6; 使用Oracle's PL/SQL 编程语言的基本技巧;三。写一个存储过程
在Notepad, 写下:
CREATE OR REPLACE PROCEDURE skeletonISBEGINNULL;END;把文件存为skeleton.sql.
让我们一行行遍历这个存储过程:
1 CREATE OR REPLACE PROCEDURE skeleton2 IS3 BEGIN
4 NULL;5 END;行1:CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;行2:IS关键词表明后面将跟随一个PL/SQL体。
行3:BEGIN关键词表明PL/SQL 体的开始。
四。创建一个存储过程
SQL语句CREATE OR REPLACE PROCEDURE在Oracle数据库中创建、编译和保存一个存储过程。
从Window打开SQL*Plus并且从SQL*Plus 登录到你的数据库;打开skeleton.sql文件。
在SQL命令提示符下输入以下命令:
SQL@skeletonSQL/SQL*Plus装载skeleton.sql文件的内容到 SQL*Plus缓冲区并且执行SQL*Plus语句;SQL*Plus 会通知你存储过程已经被成功地创建。
方法如下:
1:运行cmd进入命令行界面
2:进入到存放批量sql的文件夹下面
3:输入命令
sqlplus
数据库名/密码@数据库
按回车键
4:输入spool
指定路径:\a.log
按回车键
(此步骤的主要作用就是追踪批量执行sql的日志,路径随便写,只要能找到就行,a.log可以随便起名,但是必须要.log后缀)
5:@start.sql
按回车键(在批量sql文件夹下写一个文件,名字叫start.sql,其中在这个文件里面写批量sql的文件名)
具体格式如下:@@sql的文件名.sql;
@@sql的文件名2.sql;
6:spool
off
(此时a.log中所有日志已经写入完毕)
7:exit
退出sqlplus
当然只有一个sql文件,但是里面有多个insert语句,数据量非常大,此时也可以在命令状态下执行,前4步是一样的,第五步就是@文件名.sql;
每步都是一次单独的I/O,但是对于索引,由于经常使用,绝大多数都已经CACHE到内存中,所以第一步的I/O经常是逻辑I/O,即数据可以从内存中得到。但对于第二部来说,如果表比较大,则其数据不可能全在内存中,所以其I/O很有可能是物理I/O,这是一个机械操作,相对逻辑I/O来说,极其费时间。所以如果对大表进行索引扫描,取出的数据如果大于总量的5%-10%,使用索引扫描效率会下降很多。但是如果查询的数据能全在索引中找到,就可以避免进行第二步操作,避免了不必要的I/O,此时即使通过索引扫描取出的数据比较多,效率还是很高的。再者,如果sql语句中需要对索引列进行排序,因为索引已经预先排序好了,所以在执行计划索引进行排序。
根据索引的类型和where限制条件的不同,一般有如下4中类型的索引扫描:
Join是一种试图将两个表结合在一起的谓词,一次只能连接两个表。Join可以并行的读取两个连接的表的数据,但将表中符合限制条件的数据段读入内存形成row source后,join的其它步骤一般都是串行的。
目前为止,典型的join连接类型有3中:
如果row source已经在关联列上被排序,则该连结操作就不需要再进行sort操作,这样可以大大提高这种连接操作的连接速度,因为排序是个极其耗费资源的操作。预先排序的row source包括已经被索引的列或row source已经在前面的步骤中被排序了。另外,尽管合并两个row source的过程是串行的,但是可以并行访问这两个row source(如并行读入数据,排序)。
排序是一个费时,费资源的操作,基于这个原因,SMJ通常不是一种有效率的连接方式,但当row source已经排好序的前提下,SMJ的效率还是很可观的。
各连接方法试用的场景:
参考文献