oracle存储过程解析JSON
展开全部 Oracle 12.1.0.2版本有一个新功能就是可以存储、查询、索引JSON数据格式,而且也实现了使用SQL语句来解析JSON,非常方便。
JSON数据在数据库中以VARCHAR2, CLOB或者BLOB进行存储。
Oracle建议用户在插入JSON数据之前,使用is_json来验证输入JSON数据的正确性。
另外,Oracle也提供了相关的函数:Functions:json_value, json_query, json_table.Conditions:json_exists, is json, is not json, json_textcontains....
Oracle 不可逆的存储过程加密方法或者产品
可以例用Oracle 自带的Wrap工具实现,此工具在$ORACLE_HOME/BIN目录下,具体如下1、设置字符集环境变量set NLS_LANG=CHINESE_CHINA.ZHS16GBK2、创建一个存储过程文件在E:\下创建test.sql文件,内容如下:create or replace procedure test1(i in number) asbegindbms_output.put_line(' 输入参数是'||to_char(i));end;3、加密c:\> cd %ORACLE_HOME%\BINc:\>wrap iname=e:\test1.sqlPL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.Processing test1.sql to test1.plb4、运行test1.plbsqlplus /nologSQL>conn TEST/TEST@db01SQL> @e:\a.plb过程已创建。
5、运行存储过程SQL> set serveroutput onSQL> execute test1(1);输入参数是1PL/SQL 过程已成功完成。
6、查看存储过程的代码SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';结果:看不到其原码
如何解密Oracle中的存储过程
1.返回数组 (作者:enhydaoy(乱舞的浮尘) ) 在oacle后台创建一个程序包或者存储过程 connect scotttige; CREATE OR REPLACE PACKAGE ado_callpkg AS TYPE eid IS TABLE of NUMBER(4) INDEX BY BINARY_INTEGER; TYPE ename IS TABLE of VARCHAR2(40) INDEX BY BINARY_INTEGER; PROCEDURE getEmpNames (empid OUT eid,empname OUT ename); end ado_callpkg; CREATE OR REPLACE PACKAGE BODY ado_callpkg AS PROCEDURE getEmpNames (empid OUT eid,empname OUT ename) IS CURSOR c1 IS select employee_id,fist_name||','||Middle_Initial||','||last_name as name fom employee; cnt NUMBER DEFAULT 1; c c1%ROWTYPE; BEGIN open c1; LOOP FETCH c1 INTO c; empname(cnt):=c.name; empid(cnt):=c.employee_id; EXIT WHEN c1%NOTFOUND; -- pocess the data cnt :=cnt+1; END LOOP; close c1; END; end ado_callpkg; 2 前台v程序调用 Dim cn As New ADODB.Connection Dim s As New ADODB.Recodset Dim cmd As New ADODB.Command Dim st As Sting st = "{call ado_callpkg.getEmpNames({esultset 100,empid,empname})}" cn.Open "Povide=MSDAORA.1;Passwod=tige;Use ID=scott;Data Souce=ORACLE;Pesist Secuity Info=Tue" With cmd .CommandText = st .ActiveConnection = cn .CommandType = adCmdText End With s.CusoLocation = adUseClient s.Open cmd Do While Not s.EOF Deug.Pint s.Fields(0).Value & vTa & s.Fields(1).Value s.MoveNext Loop------------ 总结 1 oacle的后台存储过程,应该通过一个类似数组并且带有数字索引的变量返回,有多少个列,就有对应多少个变量 2 前台,调用的sql语句写法要注意, {call . (,,....,{esultset ,,,...})} 注意的细节 (1) 要自己指定一个数字,表示接受的行数大小,如果太小,而实际返回的记录大于这个数字,会出错 (2) 如果有输入参数,应该在command中创建输入参数,对应的地方用?替代,如 {call ado_callpkg.getEmpNames(?,{esultset 100,empid,empname})} (3) output和你存储函数的定义一致,参数名要一样,次序也一样,否则也会出错。
怎么查看oracle存储过程中用到的表,过程在包中,包已加密 我有管理...
展开全部 1.确定正在运行的过程名select name,locks,pinsfrom v$db_object_cachewhere locks > 0 and pins > 0 and type='PROCEDURE';NAME LOCKS PINSP_ETL_CRM_DESK 1 12.查询v$open_cursor 视图select sid,sql_textfrom v$open_cursorwhere UPPER(sql_text) like '%P_ETL_CRM_DESK%'SID SQL_TEXT143 begin -- Call the procedure p_etl_crm_desk(v_dtdate => :3.也可以用v$access确定select * from v$access where object='P_ETL_CRM_DESK';SID OWNER OBJECT TYPE143 KDCC P_ETL_CRM_DESK PROCEDURE4.或者dba_ddl_locksselect session_id sid, owner, name, type,mode_held held, mode_requested requestfrom dba_ddl_lockswhere name = 'P_ETL_CRM_DESK';SID OWNER NAME TYPE HELD REQUEST143 KDCC P_ETL_CRM_DESK Table/Procedure/Type Null None
oracle在开发中使用存储过程吗
这个是必须使用的,我们公司的项目中就使用到了*1) 存储过程帮助在数据库层聚集T-SQL代码。
嵌入即席SQL的网站或应用程序在应用环境下很难修改,当即席SQL嵌入在应用程序内的时候,你可能会花费太多时间试图找到和调试嵌入的SQL。
-- 一旦找到了bug,你可能就需要重新编译可执行程序,引起不必要的应用程序临时停止或痛苦的应用程序部署。
如果把T-SQL集中到存储过程中去,-- 你就只需要集中在一个地方来查询SQL代码或SQL批处理。
如果你能正确地为代码建立文档并对代码标准化,存储过程就会提升整个应用程序的可支持性。
-- *2) 存储过程帮助大的即席查询减少网络流量。
编写应用程序调用而不是500行的SQL调用来执行存储过程,对网络以及应用程序的性能有正面影响,特别是当调用在一分钟内重复数千次时。
-- *3) 存储过程促进代码的可利用性。
例如,如果你的网站应用程序使用一个下拉菜单来包含一组城市,并且这个下拉菜单用于很多网页,-- 你可以在每个页面调用存储过程而不是在多个地方嵌入相同的SQL。
-- *4) 存储过程淡化数据获取的方法。
如果你修改了提供源数据的基本表,存储过程(和视图相似)能让应用程序对这个修改透明。
这样就不需要修改应用程序底层的代码就能修改。
-- 你可以把老的表换成新的,而且只要同样的列和数据类型返回给应用程序,则应用程序完全不知情。
-- *5) 与视图不同,存储过程可以利用流控制技术、临时表、表变量等。
-- *6) 存储过程对查询响应时间的影响比较稳定。
如果你使用大量的即席查询,可能会注意到有时候从查询中返回结果所花的时间变化很大 七里河团队答疑助人,希望我的回答对你有所帮助
转载请注明出处51数据库 » oracle存储过程解密工具软件
联合国灭狗灭猫特种战士