pl/sql2
DDL语言,比如create table,drop table删除表,truncate table 清空表 ,alter table ,create index 创建索引, drop index 删除索引 等改变表结构的,就不需要写commit(因为内部隐藏了commit);
create or replace (oracle没有此选项)表示在创建视图时,如果已存在同名的视图,则重新创建,
create 如果创建已经存在,会报一个错误 -‘对象已存在’
create or replace 则不会报错,如果创建已存在,它会先删除原来的,然后创建你要创建的
在oracle中只能替换成 drop table 后, 再create, oracle强行使用create or replace table testTb,会报错,后面的sql也不会执行
ORA-00922: 选项缺失或无效 只能使用先drop再create来代替
可以用create or replace的对象有:functions, procedures, packages, types, synonyms, trigger and views,就是没有table,也没有sequence。
pl/sql创建表, 建主键时, 表中列名是id,那么keys的主键name 不能用id,而应写pk_id
新建表后,请重新ctrl+q打开窗口
tools-- export user objects 选择要导出的2张表,导出为1.sql,
如何导入呢? 选择 tools-- import tables 选择sql insert标签页,使用command window, 选择1.sql,
执行即可创建成功
sqlplus 结束命令, 当执行sql名称出错时, 可以输入 / ,回车终止, procedure created,就成功了,\
在pl/sql的command窗口(ctrl+u),或登录安装有oracle的linux服务器, 使用sqlplus登录, 执行.sql文件,
都可以使用@c:1.sql 或 @/home/1.sql 回车即可执行 @后可加一个空格, 但最好不加
这里注意,即便是单独一个创建一个存储过程, 也需要在末尾,换行加 / (即单独一行/), 告诉sqlplus要执行的sql
1.pl/sql默认打开 My objects(速度快), 在browser顶部的过滤图标处, 新增My objects,勾选 default,user不写,where clause写上 owner=user
2.pl/sql保存密码 顶部tools-preferences 勾选store with password是无用的,
需要在logon history 设置 fixed users user/[email protected]
omcr/[email protected]/ums100
pm/[email protected]/dsdb
3.左侧browser 的recent objects里展示的是你最近 打开/修改/describe的表/视图/job等,可以将其上移到顶部,设置为绿色文件夹
将tables procedures views 都上移
4.tools-preferences-sql window设置
null value cell color 我设置的深绿色
5.sql window字体全大写, 表别名也大写, 因为美化后就都是大写了
sql window 将auto select statement打钩, 使用注意, 相邻sql必须以分号结束 换行,
f8后去除勾选的图层,敲击空格就好了
ctrl+shift+home选中光标前的所有行
6.按某列分组,后将值合起来,逗号分隔
mysql 用group_concat(); oracle 用 wm_concat()
7.pl/sql 起别名, select 字段就会有提示c.name\
8.存储过程调试, 右击存储过程,选择test window, ctrl+n单步, 右键变量 add variable to watches,
9.oracle主键自增, 为不同表分别使用用各自的序列, insert数据就是连续的,
如果多个表公用一个序列,就会不连续, 关于是否为不同表创建触发器, 可以不创建, 那么就需要在
insert inito pm_guideline(id) values(HIBERNATE.SEQUECE.nextval);
10.oracle的分组比较严格, select 字段 必须是group by必须出现的列,或聚合函数,
mysql分组不严格
11.concat()在oracle中用于字符拼接, 只能拼接2个字符, 在mysql中没有限制
如果在oracle中拼接多个字符, 使用 select '1' || '2' || '3' from dual;
12. distinct 两列 和 group by 两列, 结果是一样的 即按两列去重
如果是将 补丁 .sql文件上传到linux环境下, sqlplus登录后, 使用 @/home/init_pm.sql执行.sql文件,
创建存储过程后面有 call 存储过程名();那么 必须 回车换行, 加上 / ,才可以正确创建存储过程.
当然,如果用的是 pl/slq 的commond window窗口, 输入 start d:\init_pm.sql, 执行, 也必须要有 / ,才可以创建存储过程成功
--数据库查询的时间, 展示到界面 需要转为字符
select to_char(c.create_time, 'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdatae, 'yyyy"年"mm"月"dd"日"') from dual;
select trunc(sysdate-1,'dd') from dual; --昨天的日期 2019/04/30
select trunc(sysdate,'dd')-1 from dual; --和上面的结果一样
select trunc(sysdate,'hh24') from dual; --截取到小时整点 2019/4/19 10:00:00
--如果是insert到数据库, 则需要转为日期
select to_date('2019-09-09 15:15:15', 'yyyy-mm-dd hh24:mi:ss') from dual;
--linux查找文件
find / -name *wode*.sq*
以pm用户为例建表:
pm用户 pm密码 pm_data数据表空间 pm_idx索引表空间
Create table pm_test(a number,b
number); ---建表的时候就不要带表空间了
Create index idx_pm_test on pm_test(a)
tablespace pm_idx; -----建索引的时候指定本用户对应的索引表空间。
请大家的脚本中不要自己去创建表空间、删除表空间,脚本内容仅涉及业务建表、索引、sequence、存储过程等。