ORACLE
shahaizimxm
快乐工作,认真生活
展开
-
SQL 中 with as 用法(转)
withsql1 as (select to_char(a) s_name from test_tempa),R]F5^5"KFW0nB0sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1))转载 2010-04-01 15:41:00 · 1476 阅读 · 1 评论 -
dense_rank() over()、rank() over()、row_number() over分析函数
dense_rank() over()、rank() over()、row_number() over分析函数SELECT DEPTNO, ENAME, SAL, DENSE_RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) TOPN FROM EMP;结果: SEL原创 2010-04-02 16:37:00 · 1387 阅读 · 0 评论 -
一次奇怪的ORA-01722 invalid number错误
<br />ORA-01722 invalid number很容易理解,无须多言,一般发生在显式的to_number()类型转换的参数错误时。<br />前几天我也遇到了一个由于直觉作怪而差点被忽略了的ORA-01722错误。<br /> <br />一个查询 select to_number(c.name) as srvtype, value as typename from sys_code c where c.srvclass=9 --srvclass为字符型<br />一直工作得很好,但突然一天返回转载 2010-07-01 18:37:00 · 2525 阅读 · 0 评论 -
表分健的正确使用sql
今天在测试开发代码的时候,发现在分区健上做了如下操作:select count(0) from endss.en_wto_cookie_type_fatdt0 where trunc(yyyymmdd) = trunc(sysdate);其中yyyymmdd是表cookie的分区健,且格式是yyyymmdd这句代码有什么问题了?通过查询执行计划,可以看出,这样写sql,就不会用到分区健了,会进行全分区扫描,影响性能。自己试验了一次,来证明一下这个问题DROP TABLE order_act;CREATE T原创 2010-07-12 11:12:00 · 661 阅读 · 0 评论 -
一条SQL语句的剖析
<br />查询发了5个以上优质产品的会员数量<br />SQL> SELECT/*+ parallel(a 4)*/ DISTINCT<br /> 2 count(a.Admin_Member_Id) over() AS admin_member_cnt<br /> 3 FROM ENDSS.EN_WTO_PROD_WIDE_FATDT0 A<br /> 4 WHERE A.IS_RIGHT_PROD = 'Y'<br /> 5 GROUP BY a.admin_member_原创 2010-07-29 15:02:00 · 629 阅读 · 0 评论 -
ORACLE执行计划-SQL语句开了并行oracle的执行情况
SQL语句开了并行oracle并不一定执行并行SQL> explain plan for select /*+ parallel(a 4) */ count(1) from enods.ws_product a;Explained.Elapsed: 00:00:00.31SQL> select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT----------------------------------------------------------原创 2010-08-03 19:45:00 · 2211 阅读 · 0 评论 -
ORACLE执行计划-SQL语句开并行与不开并行在执行计划中的体现
SQL语句开并行于不开并行的区别ENODS.ESCROW_TRADE 数据量小于ENODS.ESCROW_OPERATION_LOG 数据量,且ENODS.ESCROW_TRADE 有唯一索引SQL>set autot on;SQL> SELECT COUNT(distinct A.SELLER_LOGIN_ID) AS SEND_GOODS_MEMBER_CNT FROM ENODS.ESCROW_TRADE A, ENODS.ESCROW_OPERATION_LOG B WHERE A原创 2010-08-03 15:09:00 · 1647 阅读 · 0 评论 -
ORACLE null值比较问题
<br />CREATE TABLE mxm_test03<br />(mxm_name VARCHAR2(100)) ;<br /><br />INSERT INTO mxm_test03 VALUES(NULL);<br /> <br />SELECT * FROM mxm_test03 WHERE mxm_name <> 'risk';<br />结果:无记录<br /> <br />结论:null <> 'risk'不成立。原创 2010-08-12 17:40:00 · 855 阅读 · 0 评论 -
ORA-01765 specifying table's owner name is not allowed
修改表名的操作错误语法如下:ETL@RACTEST> rename etl.mxmtest to etl.mxm;rename etl.mxmtest to etl.mxm *ERROR at line 1:ORA-01765: specifying table's owner name is not allowed正确语法:ETL@RACTEST> rename mxmtest to mxm;Table renamed.结论:修改表名不能加用户名原创 2010-09-20 17:22:00 · 3928 阅读 · 0 评论 -
ORA-14047: ALTER TABLE|INDEX RENAME 不可以与其它分区组合
我们在对其他用户表改名字的时候,会遇到ORA-14047错误.例如:SQL> connect scott/tiger已连接。SQL> create table test 2 ( id number, 3 name varchar2(20) 4 );表已创建。SQL> alter table scott.test rename to scott.test1;alter table scott.test rename to scott.test1转载 2010-09-20 19:04:00 · 9548 阅读 · 0 评论 -
ORACLE读写文件
<br />运用UTL_FILE包进行文件的读写操作<br /> <br />读文件的操作如下<br />步骤1:在oracle数据库中创建文件目录<br />SQL>create or replace directory ORADIR_HY as '/home/qaadmin/';(如果登录的oracle用户没有创建目录的权限,则需要先授权<br />授权语句:Grant create any directory to mengxm;)<br /> <br />步骤2:目录创建以后,就可以把读写权限授原创 2010-11-26 15:09:00 · 2217 阅读 · 0 评论 -
INSERT ALL的用法
<br />INSERT ALL的用法<br /> <br /><br /> <br /> <br /><br /> <br /> <br /> <br />原创 2010-11-04 14:18:00 · 1029 阅读 · 0 评论 -
白盒测试之静态检查--sql检测器设计
今天开发了五个检测器,用于检测代码中的sql,判断是否存在优化的可能,是否违反了相应的优化规则。规则如下:1、PERFORMANCE _DB_SQL_NULL sql语句使用了is null、is not null2、PERFORMANCE _DB_SQL_NOTQEUAL sql语句使用了不等号3、PERFORMANCE _DB_SQL_CANCAT_FIELD sql语句使用了字段连接号4、PERFORMANCE _DB_SQL_NOTIN sql语句使用了not in5、PERF转载 2010-11-17 10:53:00 · 846 阅读 · 0 评论 -
视图(view)update问题
刚刚我试了一下,简单的视图是能update的。阿男说的“视图有伪列的不能update,能映射到表上的可以update”开始不理解,查了一下,这个意思是说视图的每个列能对应到实际表字段的列,此时视图时可以update的。伪列包括常量表达式、rownum 等伪列、或者经过分组函数运算得到的,等等,都算是虚拟列。而且,一般对视图的更新,只能对简单视图进程更新,而不能对多表关联形成的视图进程更新,这个我验证了一下,确实如此。ETL@RACTEST> create view mxm_test01_v as selec原创 2011-02-23 14:09:00 · 1926 阅读 · 0 评论 -
insert all用法
INSERT ALL是9i新增的语法,它扩充了原有的INSERT语句,使得INSERT语句从原来的只能插入到一张表发展到可以同时插入多张表,还可以根据判断条件来决定每条记录插入到哪张或哪几张表中。example:CREATE TABLE mxm01(ID NUMBER,NAME VARCHAR2(10))CREATE TABLE mxm02(原创 2010-04-14 14:41:00 · 953 阅读 · 0 评论 -
row_number分析函数
row_number() over()分析函数:对记录进行编号。--从多到少排列销售人员的工资,取前三行。如果该部门少于三人,则返回的记录少于三个。SELECT * FROM (SELECT A.deptno, A.ENAME, A.SAL, ROW_NUMBER() OVER(PARTI原创 2010-04-02 16:35:00 · 740 阅读 · 0 评论 -
SP2-0310: 无法打开文件
sql>@main.sql SP2-0310: 无法打开文件"rdbms/admin/main.sql" 如果这个.sql存在的话,那么就是当前的目录不正确. c:/>cd到main.sql文件所在的目录下 sql>sqlplus etl/etl@dwtest2 sql>@main.sql原创 2010-04-01 15:59:00 · 17137 阅读 · 2 评论 -
Windows下常见Oracle服务介绍
注:SID - 数据库标识 HOME_NAME - Oracle Home名称,如OraHome92、OraHome81 (1)OracleServiceSID 数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动类型为自动。服务进程为ORACLE.EXE,参数文件initSID.ora,日志文件SIDALR原创 2010-04-01 15:59:00 · 381 阅读 · 0 评论 -
ora-00054 resource busy and acquire with NOWAIT sp
ora-00054 resource busy and acquire with NOWAIT specified原因:资源被其他用户锁定解决方法:原创 2010-04-01 15:48:00 · 543 阅读 · 0 评论 -
oracle中schema指的是什么?
看来有的人还是对schema的真正含义不太理解,现在我再次整理了一下,希望对大家有所帮助。 我们先来看一下他们的定义: A schema is a collection of database objects (used by a user.). Schema objects are the logical structures that directly ref转载 2010-04-01 15:54:00 · 564 阅读 · 0 评论 -
oracle数据库与实例的区别
ORACLE实例与数据库的区别 总是有人贴,但总是没讲清楚,下面的讲解是我见到的讲的最清楚的,谢谢原创者 =========================================== 刚接触ORACLE的人肯定会对实例和数据库感到困惑,实例到底代表些什么?为什么会有这个概念的出现? ORACLE实例 = 进程 + 进程所使用的内存(SGA)转载 2010-04-01 15:54:00 · 561 阅读 · 0 评论 -
sqlplus中调用plsql存储过程
alter session set nls_language=american;accept P_OWNER1 prompt INPUT TABLE1 OWNER:/*接受控制台输入*/accept P_TABLE1 prompt INPUT TABLE1 NAME:accept P_OWNER2 prompt INPUT TABLE2 OWNER:acce原创 2010-04-01 15:49:00 · 2247 阅读 · 0 评论 -
向表中添加主键约束
向表中添加主键约束 语法: alter table 表名 add constraint 主键名 primary KEY(ID);//ID表示建主键的列 示例: CREATE TABLE mxm01 ( ID NUMBER, NAME VARCHAR2(10) ); INSERT INTO mxm01 VALUES (1,a);原创 2010-04-01 15:50:00 · 2653 阅读 · 0 评论 -
oracle 数组的使用与调试(一)
oracle 存储过程中使用数组作为入参以及调试 为了便于管理与归类,我习惯将实现不同功能的过程封装在不同的包中。 首先建一个包: create or replace package PKG_PT_ADS is type array1 is table of VARCHAR2(32767) index by pls_integer;--定义一维数组原创 2010-04-01 15:51:00 · 895 阅读 · 0 评论 -
oracle 数组的使用与调试(三)
过程编写完毕后,接下来调试程序。 关于怎么样调用入参是数组的过程,耽误了我很多时间,学艺不精啊! 对于入参是集合(比如数组)的,我们需要单独写一个过程来调用它。plsql中点击过程右键调试,对于数组,并没有赋值的地方。 -----------------------------------------------------------------------------原创 2010-04-01 15:53:00 · 884 阅读 · 0 评论 -
数据库名(DB_NAME)、实例名(Instance_name)、以及操作
顺便一起学学 数据库名(DB_NAME)、实例名 (Instance_name)、以及操作系统环境变量(ORACLE_SID) 在ORACLE7、8数据库中只有数据库名(db_name)和数据库实例名(instance_name)。在ORACLE8i、9i中出现了新的参数,即数据库域名(db_domain)、服务名(service_name)、以及操作系统环境变量(转载 2010-04-01 15:55:00 · 931 阅读 · 0 评论 -
ORA-12519问题
无法连接到数据库实例: ORA-12519: TNS:no appropriate service handler found (DBD ERROR: OCIServerAttach)。 在网上搜了一下,都是英文信息,也不是很完整,估计是进程数量超出,我就远程询问支持我们的DBA,他先让我检查一下,在pl/sql里 select count(*) from v$原创 2010-04-01 15:56:00 · 674 阅读 · 0 评论 -
ddl操作
今天写存储过程,用到了动态sql。 其中我是这样用的: EXECUTE IMMEDIATE truncate table en_pt_kw_aeffect_sumt0_mapping WHERE Status = DAY ; 调试的时候报错了。 错误: ora-03291:Invalid truncate option-missing STORA原创 2010-04-01 15:56:00 · 1857 阅读 · 0 评论 -
动态sql,动态游标
create or replace package body two_table is PROCEDURE two_tables(p_type_cols OUT type_cols) IS v_column_name VARCHAR2(100); v_sql VARCHAR2(32767); v_sqls VARCH原创 2010-04-01 15:57:00 · 538 阅读 · 0 评论 -
oracle动态二维数组
type array1 is table of VARCHAR2(32767) index by pls_integer;--定义一维数组type array2 is table of array1 index by pls_integer;--定义二维数组原创 2010-04-01 15:57:00 · 1012 阅读 · 0 评论 -
oracle一维数组
FUNCTION QUERY_COL_TYPE_TABLE( /********************************************************************* *功能:将select结果直接into到一维数组 *parameter: *作者:XIANGMIN.MENGXM *时间:2009-6原创 2010-04-01 15:58:00 · 967 阅读 · 0 评论 -
EXECUTE IMMEDIATE 用法
execute immediate执行动态语句。 eg: create or replace procedure proc( t_name in varchar2 ) IS num_record NUMBER; begin execute immediate insert into || t_name || values (1,原创 2010-04-01 15:58:00 · 1073 阅读 · 0 评论 -
install_driver(Pg) failed: Can't locate DBD/Pg.pm in @INC
在运行perl脚本的时候,如果遇到如下问题:install_driver(Pg) failed: Can't locate DBD/Pg.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-lin原创 2011-04-11 13:58:00 · 4394 阅读 · 1 评论