oracle条件编译
⑴ ORACLE和PLsql Developer什么关系
安装PLSQL Developer和安装oracle之间没有联系。
ORACLE是数据库,有客户端和服务器。
PLSQL Developer只是第三方工具,服务于ORACLE,类似的工具还有Toad,sqlplus,sql developer等等。
但是如果没有oracle客户端,安装了PLSQL Developer也没有用处。
(1)oracle条件编译扩展阅读:
PL/SQLDeveloper的主要特性:
PL/SQL编辑器,具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息时,它将自动出现,至多单击即可将信息调出。
⑵ Oracle自定义函数编译不通过,条件语句应该怎么写
create or replace function a(p_1 number)
return number
is
begin
if p_1>0 then
return 1;
elsif p_1=0 then
return 0;
-----建议ELSE加上,这样IF循环才完整,当然也可以不加,编译注意符号是不是英文状态下的。
-- -else
----return -1;
end if;
end;
/
⑶ Oracle,SQL语句中/*+*/是什么技术
运用的是oracle中的哈希连接,/*+*/相当于代码中的编译指令,要求oracle按照指定的某种轨则执行,而不是使用默认设定use_hash(a,b)是其一一种
当内存能够提供足够的空间时,哈希(HASH)连接是Oracle优化器通常的选择。哈希连接中,优化器根据统计信息,首先选择两个表中的小表,在内存中建立这张表的基于连接键的哈希表;优化器再扫描表连接中的大表,将大表中的数据与哈希表进行比较,如果有相关联的数据,则将数据添加到结果集中。当表连接中的小表能够完全cache到可用内存的时候,哈希连接的效果最佳。哈希连接的成本只是两个表从硬盘读入到内存的成本。但是,如果哈希表过大而不能全部cache到可用内存时,优化器将会把哈希表分成多个分区,再将分区逐一cache到内存中。当表的分区超过了可用内存时,分区的部分数据就会临时地写到磁盘上的临时表空间上。因此,分区的数据写磁盘时,比较大的区间(EXTENT)会提高I/O性能。ORACLE推荐的临时表空间的区间是1MB。临时表空间的区间大小由UNIFORMSIZE指定。当哈希表构建完成后,进行下面的处理:1)第二个大表进行扫描2)如果大表不能完全cache到可用内存的时候,大表同样会分成很多分区3)大表的第一个分区cache到内存4)对大表第一个分区的数据进行扫描,并与哈希表进行比较,如果有匹配的纪录,添加到结果集里面5)与第一个分区一样,其它的分区也类似处理。6)所有的分区处理完后,ORACLE对产生的结果集进行归并,汇总,产生最终的结果。当哈希表过大或可用内存有限,哈希表不能完全CACHE到内存。随着满足连接条件的结果集的增加,可用内存会随之下降,这时已经CACHE到内存的数据可能会重新写回到硬盘去。如果出现这种情况,系统的性能就会下降。当连接的两个表是用等值连接并且表的数据量比较大时,优化器才可能采用哈希连接。哈希连接是基于CBO的。只有在数据库初始化参数HASH_JOIN_ENABLED设为True,并且为参数PGA_AGGREGATE_TARGET设置了一个足够大的值的时候,Oracle才会使用哈希边连接。HASH_AREA_SIZE是向下兼容的参数,但在Oracle9i之前的版本中应当使用HASH_AREA_SIZE。当使用ORDERED提示时,FROM子句中的第一张表将用于建立哈希表。
⑷ Oracle使用merge into 编写存储过程 遇编译错误:PL/SQL: ORA-00926: 缺失 VALUES 关键字
Oracle使用merge into 编写存储过程 遇编译错误,是设置错误造成的,解决方法如下:
1、首先新建存储过程,Create or ReplaceProcere CHK_SYS_EMP 检查系统工号。
⑸ oracle中替换变量的作用有哪些
1.都知道SQL是要到内存中执行的,他会将你的SQL语句放到共享池中进行解析,并缓存,所以用替换变量就可以减轻共享池中库缓存的负担。
举个例子吧
select * from t where id=1;
select * from t where id=2;
这2句话他会当作2个SQL语句进行解析
select * from t where id=&id;
然后输入1,2,3。。。
他会当作1条SQL进行解析,所以在某些情况下带来的性能提升不是一点点。
同时,用替换变量支持多用户同时使用
⑹ oracle的基础问题!
sql的编译顺序是:from>where>select>group by>having>order by。
由于先编译where条件的时候还没有编译到select条件,因此别名month对于where条件来说不可用。修改如下:
1、
select ename,to_char(hiredate,'mm') month from emp where to_char(hiredate,'mm')=2;
2、
select ename,month from(
select ename,to_char(hiredate,'mm')month from emp)
where month = 2;
---
以上,希望对你有所帮助。
⑺ oracle 数据库中存储过程输出情况
1、编写存储过程,
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('输出SQL语句1');
elsif M < 3 then
dbms_output.put_line('输出SQL语句2');
else
dbms_output.put_line('nothing');
end if;
end;
⑻ Oracle 当两个表关联时,用where条件关联快还是用join on关联快,还有其他什么区别
一样的吧
如果用where是老语法的
用join是新语法
性能都一样 数据库优化器会自动识别
即使where后面加了很多其它条件
建议使用join on
因为写where如果忘记写关联条件 就成笛卡尔积了
join on 是个好的习惯能避免这种不必要的错误出现
⑼ 谁能介绍如何修改一个Oracle存储过程的实际操作步骤
以下是介绍如何修改一个Oracle存储过程的实际操作步骤,如果你要执行Oracle存储过程,首先你需要写出一个关于输出的字符串“Hello World!”的存储过程,以下的相关内容就是接这讲述Oracle存储的步骤。
让我们写一个输出字符串“Hello World!”的存储过程,用Notepad打开你的skeleton.sql 文件,. 用DBMS_OUTPUT.PUT_LINE 过程调用去替换NULL语句,如下所示:
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World!');
END;
保存到文件skeleton.sql.
从SQL*Plus命令行, 打开文件skeleton.sql .
SQL> @skeleton
SQL>
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World!');
* END;
SQL> /
SQL*Plus 通知你存储过程成功创建并输出提示信息:Procere created.
SQL>
用EXECUTE 命令运行你的存储过程:
SQL> EXECUTE skeleton;
SQL*Plus显示存储过程运行成功:
PL/SQL procere successfully completed.
我们想要的输出字符串 "Hello World!"没有出来,在显示一个DBMS_OUTPUT.PUT_LINE 结果前需要运行一个SET命令,在SQL*Plus 命令行提示符,键入:
SQL> SET SERVEROUTPUT ON
再次执行你的存储过程:
SQL> EXECUTE skeleton;
现在结果输出了:
Hello World!
PL/SQL procere successfully completed.
当调试一个存储过程时,遵循一样的步骤,修改SQL文件,创建存储过程,执行存储过程,根据编译器反馈的出错信息进行修改,这一步是非常繁琐的,需要依靠经验。
在实际的商用存储过程的开发调试过程中,由于涉及很多表、类型、光标、循环、条件等复杂的逻辑,和PL/SQL语句的灵活运用,编译时会产生很多错误提示信息,程序员在根据这些错误信息定位,进行修正,再编译最后得到正确的结构;
放弃一个Oracle存储过程
如果在数据库中你不在需要一个存储过程你可以删除它,SQL语句 DROP PROCEDURE 完成从数据库中删除一个存储过程,DROP PROCEDURE 在SQL中被归类为数据定义语言(DDL) 类操作,其他的例子有CREATE, ALTER, RENAME 和TRUNCATE。.
在SQL*Plus 命令提示符下,使用DROP PROCEDURE SQL 语句删除你的叫做skeleton的存储过程:
SQL> DROP PROCEDURE skeleton;
SQL*Plus assures us the procere has been removed:
Procere dropped.
本文详细讨论了如何使用Oracle工具开发Oracle存储过程的步骤。最后在存储过程的使用中可能是程序直接调用,也可能被触发器调用。
希望我的回答能对您有所帮助!!!
⑽ oracle sql 语句执行顺序
where 里面条件 and 是先执行 and 前面 还是后面条件
这个其实和你写的顺序不大,这个先后顺序,是数据库来根据表/索引的信息来决定的。
例如一个 学生表, 有学号,姓名,性别
其中 学号是主键, 姓名上面有个索引。
找 名字叫 强妹 的女生:
SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女'
与
SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹'
数据库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的数据,去筛选 性别=女的
比如表里面共有10000行。姓名叫 '强妹' 的只有一个。
那么通过索引,一步就定位到那一行。
然后再判断这一行数据的 性别字段, 是不是 = '女'
假如 姓名/性别 都没有索引呢?
那就是执行 全表扫描。
不分先后。
什么意思呢?
就是假如 表里面10000行数据。
那就是从第一行开始, 查看 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。
并不是一口气把所有的数据,都放到内存里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。