Oracle 常用Funtion
----行转列 开始----
select u_id, wmsys.wm_concat(goods) goods_sum   from shopping   group by u_id ;
select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum   from shopping   group by u_id ;
SELECT skuno, routeid, route
          FROM (SELECT var_searchdata AS skuno,
                       routeid,
                       LISTAGG(eventpoint, '->') WITHIN GROUP(ORDER BY routeid, eventseqno) AS route
                  FROM sfcroutedefb
                 WHERE routeid IN (SELECT sfcroute
                                     FROM sfccodelike
                                    WHERE skuno = var_searchdata)
                 GROUP BY routeid)
         WHERE ROWNUM BETWEEN TO_NUMBER(var_startindex) AND
               TO_NUMBER(var_endindex);
----行转列 结束----
---- 查找字符串中是否存在某一字符,存在就返回位置的索引,不存在则返回0 。
instr('源字符串' , '目标字符串' ,'开始位置(缺省默认为 1)','第几次出现(缺省默认为 1)')
----  判断字符串是否为空,如果为空,返回指定值,不为空直接返回;
NVL(Expr1,Expr2)  如果Expr1为NULL,返回Expr2的值,否则返回Expr1的值
----  把字符串转换为小写格式;
lower(char);
----  把字符串转换为大写格式;  
upper(char);
----  返回字符串的字符个数 (每个中文占一个1个字符);
length(char) ;
---- 返回字符串的字节个数 (每个中文占一个2个字节);
lengthB(char) ;
----  取字符串的字串;  
substr(char,m,n);
---- 把字符串中的某个字符替换为指定的字符;
replace(char,search_char,replace_str);
---- 将字符串转换为Number
to_number(char)
=== Oracel 数学function ===
round(n,[m]):四舍五入,省略m则四舍五入到整数位,m为小数点的位数;
trunc(n,[m]):  保留小数位,m为小数位的个数;  (截取日期或数字)
mod(n,m):取余;
floor(n):  返回小于等于n的最大整数;
ceil(n): 返回大于等于n的最小整数;
abs(n):返回数字n的绝对值。
=== Oracel 数学function ===

 === Oracel 存储过程规范和注意事项 ===
 .每一句SQL必须以分号 【;】结束。
 .变量声明无需关键词【declare】和标识【@】(与SQL SERVER 不同)。
 .变量赋值  Variable :=  'Hello'   , 赋值标识符【:=】(与SQL SERVER 需标识Set 关键词 不同)。
 .begin end 只需在存储过程正文前后标识,其他分支可不标识 (与SQL SERVER 每段分支都必须标识 不同)。
 .  Variable := 'Hello' || 'World'     字符串拼接,关键字符【||】。
 .  判断两个数值是否相等,关键字符【=】 (与SQL SERVER 使用两个等号 == 不同)
     if  a = b then
     end if

 . if 语句格式

       then
            Variable2 := Variable1 + Variable2 ;
            Variable3 := 'OK';
        else
            Variable2 := Variable1 - Variable2 ;
            Variable3 := 'FAIL;
    end if;        

 8. dbms_output.put_line(Var_msg);     文本输出,【Var_msg】为需要输出的文本。

 9.  Loop 循环
    declare var_count int;  var_counter int;
     begin
       var_count := 100 ;
       var_counter :=0;
       loop
          var_count := var_count - 1 ;
          var_counter := var_counter + 1;
          dbms_output.put_line(to_char( systimestamp,'yyyy-mm-dd hh24:mi:ss:ff') || '   ' || var_counter);
          exit when var_count < 1;        ---- 跳出循环,关键词【exit when】
        end loop;
     end;

 10. While 循环
     while 条件语句 LOOP
        begin
        end;
     end LOOP;

 11. For 循环 , 如下Case 为循环遍历游标
    for item in cursor LOOP
        begin
            dbms_output.put_line(item);
        end;
    end LOOP;

  12. select  columnName into variable from tableName where rownum = 0      把查找的结果【columnName】赋值给变量【variable】。

  13. goto 使用 , 跳转位置的字符需用【<<>>】标注起来。
        goto exitTag
        <<exitTag>>       

  14.  drop procedure MES1.WMS_MATERIELALLOT_SP      删除存储过程

  15.  Toad 中SQL执行存储过程  (如下例子为执行MES转换工单的存储过程)
         declare
           var_o_message     VARCHAR2 (5000);
           var_wo_prefix       VARCHAR2 (100) ;
           var_lasteditby       VARCHAR2 (100) ;
           var_data1             VARCHAR2 (100) ;
           var_data2             VARCHAR2 (100) ;
           var_data3             VARCHAR2 (100) ;
           var_data4             VARCHAR2 (100) ;
         begin
             AP.r_auto_convert_wo ( var_o_message ,var_wo_prefix, var_lasteditby , var_data1,  var_data2 , var_data3 ,var_data4 ) ;
             commit ;       ---- 提交执行
         end ;

   16. 查询存储过程的参数   (all_arguments 为系统视图)
        select * from all_arguments where object_name = 'WH_WEBUTILITY_SP' order by sequence 

   17.C#调用存储过程获取输出参数时    ,如获取到输出参数为空值,先检查定义输出参数的大小,可以尝试把参数的大小改为不大于2000,然后再进行调试。
        当输出参数的大小定义比较小或没有定义,而存储过程输出较长字符串时,也会引发异常,如(ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小)。

   18. Oracle 用户自定义异常处理
         DECLARE
           v_empno employees.employee_id%TYPE :=&empno;
           var_error  EXCEPTION;                 --1、定义异常
        BEGIN
            UPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;
            IF SQL%NOTFOUND THEN
                RAISE var_error;                      --2、抛出异常
            END IF;
        EXCEPTION
            WHEN var_error THEN                --3、处理异常
                 DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');
                 ROLLBACK;
            WHEN OTHERS THEN
                 DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
                 ROLLBACK;    -- 事物回滚
        END;
 === Oracel 存储过程规范和注意事项 ===

 === Oracel 时间function ===
 sysdate: 该函数返回系统时间,精确到秒。
 systimestamp :  系统时间,精确到微妙。
 add_months(date,n) : 某一时间过了n个月后的时间,返回时间。
 last_day(d); 返回当前日期该月的最后一天。
 next_day(sysdate,n)   :当前时间的下n天,n必须为大于或等于1的正数。
 to_timestamp(timestamp_varchar)    : 将时间戳字符转换为时间戳(timestamp)数据格式。
 to_date('2017-10-13','yyyy-mm-dd')  : 字符串转为日期格式(date);
 === Oracel 时间function ===

 alter table tableName rename column oldCName to newCName;    -- 修改字段名
 alter table tableName modify (cloumnName 数据类型);    -- 修改数据类型
 === Oracel 数据表的部分操作 ===

 === Oracle中数据类型的转换  ===  
 to_char():把数据转换为字符串类型:to_char(字符串,类型);
.日期转换
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
.显示1980年入职的员工信息
;
 === Oracle中数据类型的转换  === 

 ===  Oracle中的系统函数:sys_context();   ===
 ) terminal 当前会话客户所对应的终端标识符
select sys_context('USERENV','terminal') from dual;
) language 语言
select sys_context('USERENV','language') from dual;
)db_name 当前的数据库实例名称
 select sys_context('USERENV','db_name') from dual;
)session_user 当前会话所对应的数据库
select sys_context('USERENV','session_user') from dual;
)current_schema:查看当前方案
select sys_context('USERENV','current_schema') from dual;
 ===  Oracle中的系统函数:sys_context();   === 

  ===  Oracle部分函数 ===
 ) , number ,  decimal)。
  decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
 当(条件)的值等于(值1),则返回(返回值1);等于(值2),则返回(返回值2);等于(值n),则返回(返回值n);如都不相等,则返回(缺省值)。与(case when then end)的用法相似。
 、
 ,'T')  from dual      返回(TT123),左填充
 ,'@')  from dual    返回(123TT),右填充
 convert (char,char_set,[source_char_set])   :  Oracle中字符集转换。
【char】参数是要转换的值。它可以是任何的数据类型CHAR , VARCHAR2 , NCHAR , NVARCHAR2 ,CLOB或NCLOB 。  
【char_set】参数是【char】转换的字符集的名称。
【source_char_set】参数是【char】存储在数据库中的字符集名称,默认是数据库的字符集,可缺省。
 Oracle常用字符集: UTF8 ,  ZHS16GBK ,  US7ASCII   ……
 asciistr(char)       ---- 用于返回字符的ascii形式的字符串 ;
 ascii(char)     ---- 返回单个字符的ascii 值 ;
  ===  Oracle函数 === 

、toad 如何进行表分析?
()选中表名按F4,然后弹出对话框有个按钮叫Analyze table,点击后按绿色的三角符号
()进行表分析的作用是整理索引,提高执行效率
、toad中如何查看sql的执行计划
()通过toad中的Run explain plan for current statement或者通过快捷键Ctrl+e来看

、toad中常用快捷键
F4 看表的结构
F5 执行对话框中的SQL,注意最后需要以;结尾
F7 清除当前编辑框中所有的sql
F8 查看历史的sql语句
F9 执行当前行的sql
F10 看菜单
Ctrl + F12 保存sql为文档
Ctrl +. 补全table_name
Ctrl + t 补全table_name,或者显示字段
Ctrl + e 查看当前Sql的执行计划
Ctrl+Enter 直接执行当前sql   
Ctrl+Shift+F 格式化sql语句   
Alt+箭头上下 看sql history
Ctrl+F 查找
Ctrl+R 替换 要全部替换需要选中对话框中的Entire scope
Ctrl+U 将选中SQL语句全部大写
Ctrl+L 将选中SQL语句全部小写
Ctrl+B 将选中SQL语句语句注释,commet block
Ctrl+Shift+B 将选中SQL语句取消注释,uncommet block

、如何在toad中设置快捷键

View -->toad options --> Auto Replace --> Import 导入一个text文件设置一批快捷键
文件中的内容:
例如将s设置为select * from 则 s=select * from
View -->toad options --> Auto Replace --> Add 增加一个快捷键
 ====== Toad 常用快捷键 ======
 ====== Oracle 应知应会 ======
 union : 获取联集数据 ; (  如: select * from table1  union  select * from table2  )
 minus :  去掉重复的数据 ;  (  如: select column1 from table1  minus  select column2 from table2  )
 intersect : 获取交集的数据 ; (  如: select * from table1  intersect  select * from table2  )
 SqlErrm(error_number)     :  返回指定错误代码的错误信息。参数【error_number】可选。
 SQLCode :数据库操作的返回码,其中0--成功;-1--失败;100--未找到任何数据。
 dbms_utility.format_error_backtrace()   :返回错误行 (Oracle 10g及以上版本)

Windows cmd  连接Oracle 数据库 :  sqlplus  用户名/密码@数据库名    (如:  sqlplus  HETMID/hetmid@MESDB )
ORACLE  INTO 多个变量  :  select f1,f2,f3 into v1,v2,v3 from tab1  ;

ESCAPE 'escape_character'
允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。
select * from user WHERE name LIKE '%aa/%bb%' ESCAPE '/'     ---- 第一个和最后一个%作为通配符,中间的%作为普通字符 。
escape '/'      定义[/]为转义符 。
escape '='     定义[=]为转义符 。
escape ' '      定义空格为转义符 。
P.S:第一个和最后一个%作为通配符,中间的%作为普通字符。

select * from dba_tab_privs   where  table_name = 'C_STATION_RULE' and grantee = 'HETUSER'    ---- 查看用户:HETUSER  在表:C_STATION_RULE  中的操作权限
select * from dba_objects where object_name = 'EUSER'  ---- 查询一个对象的基本信息,如查表:EUSER 的基本信息

dual : Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用 。(俗称:傀儡表)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;   -- 获得当前系统时间
select sys_context('userenv','terminal') from dual;  -- 获得主机名
select sys_context('userenv','language') from dual; -- 获得当前locale
select DBMS_RANDOM.random from dual;  -- 获得一个随机数

. 复制表结构及其数据:
    create table table_name_new as select * from table_name_old ;
. 只复制表结构:
     ;
. 只复制表数据:
    如果两个表结构一样:
        insert into table_name_new select * from table_name_old ;
    如果两个表结构不一样:
        insert into table_name_new(column1,column2...) select column1,column2... from table_name_old ;

  ====== Oracle 应知应会 ======

SELECT COUNT (*)  FROM MFWORKSTATUS @MESDB     ---- Oracle DB Link 使用  (【@MESDB】 为DB Link)

【】dba_开头.....
dba_users           数据库用户信息
dba_segments    表段信息
dba_extents       数据区信息
dba_objects       数据库对象信息
dba_tablespaces     数据库表空间信息
dba_data_files         数据文件设置信息
dba_temp_files        临时数据文件信息
dba_rollback_segs   回滚段信息
dba_ts_quotas        用户表空间配额信息
dba_free_space       数据库空闲空间信息
dba_profiles            数据库用户资源限制信息
dba_sys_privs       用户的系统权限信息
dba_tab_privs       用户具有的对象权限信息
dba_col_privs       用户具有的列对象权限信息
dba_role_privs      用户具有的角色信息
dba_audit_trail     审计跟踪记录信息
dba_stmt_audit_opts    审计设置信息
dba_audit_object          对象审计结果信息
dba_audit_session        会话审计结果信息
dba_indexes      用户模式的索引信息
dba_db_links     DB Link
dba_source       存储过程、函数、包等对象的SQL语句。

【】user_开头
user_objects 用户对象信息
user_source 数据库用户的所有资源对象信息
user_segments 用户的表段信息
user_tables 用户的表对象信息
user_tab_columns 用户的表列信息
user_constraints 用户的对象约束信息
user_sys_privs 当前用户的系统权限信息
user_tab_privs 当前用户的对象权限信息
user_col_privs 当前用户的表列权限信息
user_role_privs 当前用户的角色权限信息
user_indexes 用户的索引信息
user_ind_columns用户的索引对应的表列信息
user_cons_columns 用户的约束对应的表列信息
user_clusters 用户的所有簇信息
user_clu_columns 用户的簇所包含的内容信息
user_cluster_hash_expressions 散列簇的信息
user_jobs   job 信息

【】v$开头
v$database 数据库信息
v$datafile 数据文件信息
v$controlfile控制文件信息
v$logfile 重做日志信息
v$instance 数据库实例信息
v$log 日志组信息
v$loghist 日志历史信息
v$sga 数据库SGA信息
v$parameter 初始化参数信息
v$process 数据库服务器进程信息
v$bgprocess 数据库后台进程信息
v$controlfile_record_section 控制文件记载的各部分信息
v$thread 线程信息
v$datafile_header 数据文件头所记载的信息
v$archived_log归档日志信息
v$archive_dest 归档日志的设置信息
v$logmnr_contents 归档日志分析的DML DDL结果信息
v$logmnr_dictionary 日志分析的字典文件信息
v$logmnr_logs 日志分析的日志列表信息
v$tablespace 表空间信息
v$tempfile 临时文件信息
v$filestat 数据文件的I/O统计信息
v$undostat Undo数据信息
v$rollname 在线回滚段信息
v$session 会话信息
v$transaction 事务信息
v$rollstat 回滚段统计信息
v$pwfile_users 特权用户信息
v$sqlarea 当前查询过的sql语句访问过的资源及相关的信息
v$sql 与v$sqlarea基本相同的相关信息
v$sysstat 数据库系统状态信息

【】all_开头
all_users             数据库所有用户的信息
all_objects          数据库所有的对象的信息
all_def_audit_opts       所有默认的审计设置信息
all_tables          所有的表对象信息
all_indexes       所有的数据库对象索引的信息
all_db_links           所有的DB Link
all_source             存储过程的SQL语句
all_arguments      查询存储过程的参数  

【】session_开头
session_roles 会话的角色信息
session_privs 会话的权限信息

【】index_开头
index_stats 索引的设置和存储信息

【】伪表
dual 系统伪列表信息

【】system_ 开头
select * from system_privilege_map where name like '%PROCEDURE%';    -- 查询关于存储过程的系统权限

====== Oracle 常用数据类型 ======
CHAR  固定长度字符串 最大长度2000 bytes
VARCHAR2  可变长度的字符串 最大长度4000 bytes  可做索引的最大长度749
NCHAR  根据字符集而定的固定长度字符串 最大长度2000 bytes
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题
timeStamp   日期时间,精确到微妙。
) 足够存储大部头著作
RAW 固定长度的二进制数据 最大长度2000 bytes  可存放多媒体图象声音等
LONG RAW 可变长度的二进制数据 最大长度2G 同上
BLOB 二进制数据 最大长度4G
CLOB 字符数据 最大长度4G
NCLOB 根据字符集而定的字符数据 最大长度4G
BFILE 存放在数据库外的二进制数据 最大长度4G
ROWID 数据表中记录的唯一行号  bytes ********.****.****格式,*为0或1
NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes
NUMBER(P,S)   数字类型 P为整数位,S为小数位
DECIMAL(P,S)  数字类型 P为整数位,S为小数位
INTEGER  整数类型 小的整数
),双精度
),精度更高
====== Oracle 常用数据类型 ======

--以下几个为相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process ;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;

--查看被锁的表
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
--查看那个用户那个进程照成死锁
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
--查看连接的进程
SELECT sid, serial#, username, osuser FROM v$session;
--3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,
任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
--杀掉进程 sid,serial#
alter system kill session'210,11562';
====== Oracle 查看被锁的表和解锁 ======

. 查询性能最低的十条SQL
SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea
 ;
====== Oracle 性能检测 ======  

create or replace procedure proc_test(
--参数区域
)
is
--变量区域
    --sql脚本
    v_sql ) :='';
    --记录学生数量
    v_num number;
begin
--执行区域
    -- execute immediate用法1:立刻执行sql语句
    v_sql := 'create or replace view myview as select id,name from student';
    execute immediate v_sql;

    --- execute immediate用法2:立刻执行sql语句,并赋值给某个变量
    v_sql := 'select count(1) from student';
    execute immediate v_sql into v_num;

    -- execute immediate用法3:带参数的sql
    v_sql:='select * from student t where t.name=:1 and t.age=:2';
    ;

end proc_test;

  ====== execute immediate 的简单用法 ======

最新文章

  1. RabbitMQ 实现RPC
  2. mod-mono
  3. [dpdk] 熟悉SDK与初步使用 (四)(L3 Forwarding源码分析)
  4. http中get和post的区别
  5. Java中 return 和finally
  6. FIRST集和FOLLOW集
  7. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
  8. 设计模式(八):Bridge桥接模式 -- 结构型模式
  9. 原生和jQuery的ajax用法
  10. 学习customEvent
  11. UIDebuggingInformationOverlay 调试
  12. 优化实现Mobile/Bumped Diffuse
  13. 实验吧—Web——WP之 what a fuck!这是什么鬼东西?
  14. git ----(2)
  15. 关于Dynamics CRM 安装用户权限的说明
  16. [SublimeText] Sublime Text 2 运行 Python 脚本中文路径解决方法
  17. codeforces水题100道 第十六题 Codeforces Round #164 (Div. 2) A. Games (brute force)
  18. java 抽象类 以及模块方法设计模式,接口
  19. 超全table功能Datatables使用的填坑之旅--2:post 动态传参: 解决: ajax 传参无值问题.
  20. 在阿里云服务器中安装配置mysql数据库完整教程

热门文章

  1. 用c++编程:用两个栈实现队列
  2. 个人博客搭建----基于solo
  3. android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决
  4. javascript打开本地应用
  5. CreateDialog Win32 API调用的一个小问题
  6. caffe源代码分析--softmax_layer.cpp
  7. HDU 5294 Tricks Device(多校2015 最大流+最短路啊)
  8. 开发DataSnapserver
  9. Android和H5交互-基础篇
  10. tflearn mnist 使用MLP 全连接网络一般都会加dropout哇