Oracle经验积累
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 的简单用法 ======
Oracle经验积累的更多相关文章
- 操作hadoop的经验积累
操作hadoop的经验积累 Hadoop namenode –format 在执行格式化-format命令时,要避免namenode的namdespaceid与datanode的namespaceid ...
- 【转】oracle数据库开发的一些经验积累
1.不安装Oracle客户连接Oracle 8的方法 请将以下文件拷贝到运行文件所在目录 一.ODBC动态库 : ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc ...
- IBatis.Net项目数据库SqlServer迁移至Oracle经验
最近完成了一个(IBatis.Net+MVC)项目的数据库+代码迁移工作,可把我折腾得~~~ IBatis.Net是一个ORM框架,具体介绍可以问度娘.我之前没用ORM框架使用经验,所以这一路我不是走 ...
- [转]Oracle 经验集
-- 转换字符串为日期格式 to_date('2011-12-30 11:54:30','yyyy-MM-dd:hh24:mi:ss') Oracel 用 C# 连接,Microsoft 自带的 Sy ...
- oracle经验小节2
1,instr 函数 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置. 语法如下: instr( string1, string2 [, start_position ...
- Oracle 知识积累
1.oracle存储过程中is和as的区别 在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用AS不能用IS,在游标(CURSOR)中只能用IS不能用AS ...
- java编程经验积累
1.java批量删除checkbox中选中的对象-CSDN论坛-CSDN.NET-中国最大的IT技术社区 http://bbs.csdn.net/topics/360223125 2.重定向与转发路 ...
- .net经验积累
希望对.net编程者有所帮助 1.学会配置环境变量 1.我的电脑-属性-环境变量-双击下面的path-粘贴路径 2.ctrl+r 输入软件名字按回车 2.常用vs2010快捷键 代码格式化:ct ...
- 移动web经验积累
1.从最小宽度时候开发,调试到iphone4来开发 2.宽度百分比,高度由具体内容决定, 3.文字需要设置最大高度,溢出隐藏 white-space: nowrap; text-overflow: e ...
随机推荐
- Spring MVC-集成(Integration)-生成XML示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_xml.htm 说明:示例基于Spring MVC 4.1.6. 以下示例说明如何 ...
- trigger dependencies
有时候,会想知道某个表是不是会有一些trigger去更新它. 但是一般更新语句是写在trigger 内部,所以我不确定 dba_dependencies这个视图能不能存储这种依赖关系. 做个试验: 创 ...
- 实现MVC.NET 5的国际化
实现国际化有三种做法: 创建资源文件. 每种语言设置一套单独的View. 1 + 2. 通常而言,第一种方法的可维护性是最高的.因为随着项目的规模的扩大,为每种语言设置一套单独的View,前期的工作量 ...
- WEB安全:SQL注入
SQL注入是站点和web应用程序中最常见的安全漏洞. 这样的恶意技术有非常多应用场景, 但(SQL注入)一般是指在数据输入的地方注入代码以利用数据库应用程序中的安全漏洞. SQL注入在接收用户输入的接 ...
- 整理100道 .net面试题
前段时间,我在准备面试的时搜到的一套 net开发人员面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需. 1. .NET和C#有什么区别 答:.NET一般指 ...
- Raphaeljs入门到精通(二)
这节我们将介绍Raphaeljs中元素的属性和事件,案例还是以上一篇的代码展开 <!DOCTYPE html> <html xmlns="http://www.w3.org ...
- SQL LEN() 函数 ,case when,聚合函数的使用方法
SELECT aa.[User_Id],cc.[User_Name],dd.Name AS DepName,aa.Module_Id,aa.Module_Name, SUM(CASE aa.Opera ...
- 【Geforce】关于如何在Geforce Experience中登录
相信不少人无法登录这个该死的Geforce Experience.这里提供几个解决方案: 1.在“服务”中启动运行 NVIDIA NetworkService Container 方式改为手动或者自动 ...
- Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】
本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779 一.基本概念 帧缓冲(Framebuffer)是Linux系统为显示设备提供 ...
- elasticsearch _field_stats 源码分析
_field_stats 实现的功能:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-field-stats.ht ...