0)COUNT(*),COUNT(1),COUNT(ROWID)三者是一样的,只是效率不同而已.
开发中执行存储过程时,有时会报以下两种错误:
1.ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小,
2.插入的值对于列过大.
对于1是因为表中列的长度定义的过小,比如char(4),插入的值如果超过4个长度的话就会报1.
对于2正好与1相饭. 3.ora-00001: 违反唯一约束条件
可能是该表的主键唯一性出错,即:主键中已有某个键值,又插入一个同样的值,这个可以察看相应的表的主键约束.
4.如何永久更改数据库时间日期格式
在注册表[hkey_local_machine/software/oracle/home0] 里面加 nls_date_format 值设为 yyyy-mm-dd hh24:mi:ss
5.select owner,table_name,tablespace_name,blocks,last_analyzed
from all_tables order by 1,2;
order by 1,2是什么意思?
根据第一列和第二列排序 相当于 order by owner,table_name
先看一下例子 SQL> select * from test_tab order by 1; COL_A COL_B ---------- ---------- A 1 A 2 B 2 B 3 C 4 D 1 D 12 D 121 D 12 9 rows selected SQL> select * from test_tab order by 2; COL_A COL_B ---------- ---------- A 1 D 1 A 2 B 2 B 3 C 4 D 12 D 12 D 121 9 rows selected SQL> select * from test_tab order by 3; select * from test_tab order by 3 ORA-01785: ORDER BY 项必须是 SELECT-list 表达式的数目 以上看来:1表示第一个栏位,2表示第二栏位 依此类推 当表中只有2个栏位时,ORDER BY 3就会出错
4.更新表(如果记录已存在则更新,不存在则插入)
MERGE INTO course c USING (SELECT course_name, period, course_hours FROM course_updates) cu ON (c.course_name = cu.course_name AND c.period = cu.period) WHEN MATCHED THEN UPDATE SET c.course_hours = cu.course_hours WHEN NOT MATCHED THEN INSERT (c.course_name, c.period, c.course_hours) VALUES (cu.course_name, cu.period, cu.course_hours);
5. Oracle的 DBMS_OUTPUT.put 与 DBMS_OUTPUT.put_line 的区别?
declare begin DBMS_OUTPUT.put( "put======= ");--不换行 DBMS_OUTPUT.put( "put======= ");--不换行 DBMS_OUTPUT.put_line( "putline====== ");--换行 DBMS_OUTPUT.put_line( "putline====== ");--换行 DBMS_OUTPUT.put_line( "putline====== ");--换行 end; 结果: put=======put=======putline====== putline====== putline====== 在SQL Plus中: SQL>set serveroutput on |