Archive for the ‘oracle’ Category

oracle调用c函数(续)

星期五, 十一月 6th, 2009

oracle调用c函数(续) 本来挺简单的问题,可惜我们系统安装的有问题。 oracle是64位的,而gcc是32位的。 这样在调用的过程会报错误。 ERROR at line 1: ORA-06520: PL/SQL: Error loading external library ORA-06522: ld.so.1: extproc: fatal: /opt/oracle/products/10.2.0/lib/sunwg.so: wrong ELF class: ELFCLASS32 ORA-06512: at "ETL.H_EXECUTE_CMD", line 1 重装64位的gcc也是个麻烦事。 从网上查了半天终于发现个好办法。 修改LD_LIBRARY_PATH=/opt/oracle/products/10.2.0/lib为 LD_LIBRARY_PATH=/opt/oracle/products/10.2.0/lib32 这样调用32位的oracle lib库。 重新启动listener。 搞定。 ><

oracle调用c函数

星期五, 十一月 6th, 2009

今天处理同事的问题,顺便学习了从oracle调用c函数的方法。 1,修改listener.ora LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS_LIST =         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC32))         (ADDRESS = (PROTOCOL = TCP)(HOST =sunwg)(PORT = 1521))       )     )   ) SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = PLSExtProc)       (ORACLE_HOME = /opt/oracle/products/10.2.0)       (PROGRAM = /opt/oracle/products/10.2.0/bin/extproc)     )     (SID_DESC =       (SID_NAME = sunwg)       (ORACLE_HOME = /opt/oracle/products/10.2.0)       (GLOBAL_DBNAME ...

oracle中xml的字符集问题

星期二, 十月 13th, 2009

今天碰到个需求,解析ORACLE数据库中存储的xml文件。 这个xml的信息作为一个varchar2的字段存储在表中。 所以要使用xml的一些特性就首先需要将varchar2类型转换成xmltype。 在测试过程中又碰到了烦人的字符集问题。 举例如下: sunwg@sunwg> create table sunwg(xml_1 xmltype); Table created. sunwg@sunwg> desc sunwg Name Null? Type -------------------------- -------- ------------------------- XML_1 XMLTYPE 创建了张有XMLTYPE字段的表sunwg。 现在向其中插入xml记录。 sunwg@sunwg> insert into sunwg values(   2  xmltype('<?xml version="1.0" encoding="gb2312" ?>   3  <FEATURELIST>   4  <FEATURE id="62923" name="TOM" />   5  <FEATURE id="62924" name="MARY" />   6  </FEATURELIST>')); 1 row created. sunwg@sunwg> commit; Commit complete. sunwg@sunwg> select * from sunwg; XML_1 ---------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="gb2312" ?> <FEATURELIST> <FEATURE id="62923" name="TOM" ...

通过数据字典查看PLSQL/VIEW的对象依赖

星期二, 九月 1st, 2009

查询PLSQL或VIEW中的倚赖对象 SELECT r3.owner,r3.object_name procedure_name,r3.object_type, r1.ORDER# seq, (SELECT owner FROM dba_objects WHERE object_id = ...

SQL/PLSQL文本解析工具sql_parse

星期二, 九月 1st, 2009

SQL/PLSQL的解析一直是个令我们很头痛的事情。 对于单个SQL的解析原来一直没什么好的方法。 对于PLSQL原来常用的方法是从ORACLE的视图sys.dependency$和sys.access$中查询, 这种方法虽然比较简单,但是存在一个比较严重的缺陷——分析粒度太粗, sys.dependency$和sys.access$这两个视图是为了保证存储过程的有效性而存在的,所以基础单位是存储过程。 也就是说通过这两个视图你可以知道PLSQL中SELECT一些表,UPDATE一些表,但你无法知道这些被查询的表和被更新的表之间的关系。 那么这些无法建立联系的,无法进行关联的离散的表对我们分析PLSQL,进行ETL的血缘分析几乎没有意义。 经过二周的程序设计和代码开发,ORACLE SQL/PLSQL文本解析程序SQL_PARSE V2.0诞生了。 下面首先介绍SQL_PARSE的实现原理,然后介绍使用SQL_PARSE分析SQL/PLSQL的示例。 一,SQL_PARSE实现原理 SQL_PARSE是用C语言基于编译原理开发的SQL/PLSQL文本解析程序。SQL_PARSE由SQL_PARSE主程序和关键字参数文本KEY_FILE.TXT组成。 主程序是整个SQL_PARSE的核心,KEY_FILE.TXT文件存储的是ORACLE中的常见关键字及其特定标识代码。 SQL_PARSE的主程序主要由四部分组成:字符识别,词法分析,语法分析,语义分析。 字符识别:识别输入的字符类型,字母,数字,标点符号 词法分析:根据字符识别的结果将多个字符进程合并归类,分析出字符串,关键字,数字,注释等有意义的单元 语法分析:根据ORACLE中的SQL语法,将词法分析的产出物进行识别,分析出列,表,用户名,操作类型,数据链等 语义分析:识别出游标,select into,并将识别结果同变量建立对应关系,得出更加精确的结果 目前SQL_PARSE V2.0可以分析出任意层次的SQL(SELECT,INSERT,DELETE,UPDATE,MERGE)和复杂的PLSQL语句。但是其中语义分析部分还是很弱。 语义分析也是未来SQL_PARSE V3.0主要需要完善和发展的部分。 通过一个小例子解释下各个部分的功能和整个程序的处理过程 select col1,(select col2 from tab2),101 from tab1 where col3='aaa'; 字符识别:通过字符的ascii码,将字符分类。s,e,l,e,c,t这样的识别为字母,1,0,1识别为数字,{}识别为括号 词法分析:根据各个单元的定义将字符分组;字符标识为字母开头的由字母,数字或者下划线组成的字符串,select就被识别为字符标识; 语法分析:根据SQL的语法构成进行类型划分,select语句为查询的开始标识符,接下来就查询的列,接着是from关键字,然后查询表等等。 语义分析:判断col1,col2这样的标识到底是表中的字段还是程序中的变量。 二,SQL_PARSE分析SQL/PLSQL的示例 例子1:分析PLSQL--p_cn_loan_loanerscore_fatdt1 oracle:~/sunwg>./sql_parse p_cn_loan_loanerscore_fatdt1.sql procedure name statement:etl.p_cn_loan_loanerscore_fatdt1 statement 0:select select table:cnpub.cn_loan_mon_times_dimt0 statement 1:delete delete table:cndss.cn_loan_loanerscore_fatdt1 statement 2:select select table:dual statement 3:insert insert table:cndss.cn_loan_loanerscore_fatdt1 select table:cnpub.cn_loan_item_dimt0 select table:cndss.cn_loan_item_sumdt1 select table:cnpub.cn_loan_item_dimt0 select table:cndss.cn_loan_item_sumdt1 select table:cnpub.cn_loan_item_dimt0 statement 4:insert insert table:cndss.cn_loan_loanerscore_fatdt1 select ...

Page 1 of 3812345678910»...Last »