pl/sql2

pl/sql2

 

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,

执行即可创建成功

pl/sql2

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、存储过程等。