类SQL PLUS窗口File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了。
设置关键字自动大写Tools->Preferences->Editor,将Keyword case选择Uppercase。这样在窗口中输入sql语句时,关键字会自动大写,而其它都是小写。这样阅读代码比较容易,且保持良好得编码风格,同理,在Tools->Preferences->Code Assistant(助手)里可以设置代码提示延迟时间、输入几个字符时提示、数据库对象的大写、小写,首字母大写等;
查看执行计划选中需要分析的SQL语句,然后点击工具栏的Explain plan按钮(即执行计划),或者直接按F5;这个主要用于分析SQL语句执行效率,分析表的结构,便于为sql调优提供直观依据;
自动替换快捷输入SQL语句,例如输入s,按下空格,自动替换成SELECT;再例如,输入sf,按下空格,自动替换成SELECT * FROM,非常方便,节省了大量的时间去编写重复的SQL语句。
设置方法:
菜单Tools–& ...
前言在我们平常的开发中可能会遇到这样的问题,就是判断某一列是否全部由数字组成,我们都知道oracle并没有给我们提供这样一个现成的函数,那么根据我的经验我总结了两个行之有效的方法(列名:column,表名:table):
使用trim+translate函数1select * from table where trim(translate(column,'0123456789',' ')) is NULL;
这里要注意的是:translate函数的第三个参数是一个空格,不是’’, 因为translate的第三个参数如果为空的话,那么永远返回’’,这样的就不能达到过滤纯数字的目的。这样把所有的数字都转化为空格,如果全部是由数 构成,那么一旦trim后自然是空,实现了上述目标。当然如果想排除空项的话,可以这样写:
1select * from table where trim(translate(nvl(column,'x'),'0123456789',' ')) is NULL;-- ...
前言今天工作的时候遇到了,于是上网百度了一下,发现了有个大佬写了一个很牛的函数,在此记录下来。
代码函数代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495create or replace function F_upper_money(p_num in number default null)return nvarchar2 is/*Ver:1.0 Created By xsb on 2003-8-18 For: 将金额数字(单位元)转换为大写(采用从低至高算法) 数字整数部分不得超过16位,可以是负数。Ver:1.1 Modified By xsb on 2003-8-20 For:个位数处理也放在For循环中。 Ver:1.2 ...
获取当前时间1select sysdate from dual;
日期格式以2023-03-02 17:09:23 为例
格式
类型
名称
示例
年(Year)
yy
two digits
两位年
显示23
yyy
three digits
三位年
显示023
yyyy
four digits
四位年
显示2023
月(Month)
mm
number
两位月
显示03
mon
abbreviated
字符集表示
显示3月(若是英文版,显示Mar)
month
spelled out
字符集表示
显示3月(若是英文版,显示March)
日(Day)
dd
number
当月第几天
显示02
ddd
number
当年第几天
显示061
dy
abbreviated
当周第几天缩写
显示星期四,若是英文版显示Thur
day
spelled out
当周第几天全写
显示星期三,若是英语显示Thursday
d
number
当周第几天,返回数字
显示5, 每周第1天是星期天
ddspth
spelled out ...
oracle 多字段排名在Oracle中实现多字段排名,可以使用ROW_NUMBER()函数结合ORDER BY子句。以下是一个示例,假设我们有一个名为sales_data的表,它包含year, region和sales字段,我们想要按year和region进行排名。
123SELECT year, region, sales, ROW_NUMBER() OVER (PARTITION BY year, region ORDER BY sales DESC) AS rankFROM sales_data;
在这个查询中,PARTITION BY year, region告诉Oracle按照year和region字段进行分组,在每个分组内部根据sales字段降序排列。ROW_NUMBER()函数为每个分组内的记录分配一个唯一的排名。
默认在存储过程中是不允许执行truncate table tablename操作,如何执行呢?
truncate是ddl操作语句,在存储过程中,直接能使的是dml操作语句。
解决方案:
1EXECUTE IMMEDIATE 'TRUNCATE TABLE b';
前言什么是表的死锁以及死锁的产生原因表的死锁是指在Oracle数据库中,两个或多个事务相互等待对方持有的锁资源,导致它们无法继续执行下去,从而形成死锁现象。
死锁的产生原因通常是因为事务在操作数据时,对数据进行了锁定,但是由于事务执行顺序或者并发操作的原因导致了互相等待对方持有的锁资源,从而形成死锁。
产生死锁的案例具体业务场景及代码示例: 假设有两个用户同时对同一张表进行更新操作,用户A执行UPDATE语句锁住了表中的某些行,而用户B也执行UPDATE语句锁住了表中的另一些行,此时就可能发生死锁。
代码示例: 用户A的更新操作:
1234BEGIN UPDATE table_name SET column1 = 'value1' WHERE condition; COMMIT;END;
用户B的更新操作:
1234BEGIN UPDATE table_name SET column2 = 'value2' WHERE condition; COMMIT;END;
在这种情况下,用户A和用户B可能会出现死锁。为了避免死锁,可以考虑修改 ...
查看表的定义,TABLE_NAME 表名
1SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_NAME') FROM DUAL;
查看视图的定义语句,VIEW_NAME 视图名
1SELECT DBMS_METADATA.GET_DDL('VIEW','VIEW_NAME') FROM DUAL;
注: 表名跟视图名称均要大写。
基本语法
MERGE INTO 的用途 MERGE INTO 是Oracle 9i以后才出现的新的功能。那这个功能 是什么呢? 简单来说,就是:“有则更新,无则插入”; 从这句话里,应该可以理解到,merge into 操作一个对象’A’的时候,要有另外一个结果集做为源数据 ‘B’; ‘merge into’ 将B中的数据与A中的数据按照一定条件’C’进行对比,如果 A中数据满足C条件,则进行update操作,如果不满足条件 ‘C’,则进行insert操作。(请注意这种对应关系);
语法结构
12345MERGE INTO target_tableUSING source_table ON (join_condition)WHEN MATCHED THEN UPDATE SET … [WHERE …] [DELETE … WHERE …]WHEN NOT MATCHED THEN INSERT (column_list) VALUES (value_list) [WHERE …]LOG ERRORS INTO … REJECT LIMIT [integer|UNLIMITED]
...
sign(数值)。正数大于0返回1,等于0返回0,负数小于0返回-1;
1select sign(-15.5),sign(0),sign(15.5) from dual;
此函数可以判断正负数数值判断。