oracle 表 xml,Oracle使用Sql把XML解析成表(Table)的方法

SELECT * FROM XMLTABLE(‘$B/DEAL_BASIC/USER_DEAL_INFO‘PASSING

XMLTYPE(‘<?xml version="1.0" encoding="gb2312" ?>

1000100001

20081130

30000101

20081130

1000100002

20081131

30000102

20081131

‘) ASB

COLUMNS USER_DEAL_IDVARCHAR2(50) PATH‘/USER_DEAL_INFO/USER_DEAL_ID‘,

DEAL_INURE_TIMEVARCHAR2(50) PATH‘/USER_DEAL_INFO/DEAL_INURE_TIME‘,

DEAL_EXPIRE_TIMEVARCHAR2(50) PATH‘/USER_DEAL_INFO/DEAL_EXPIRE_TIME‘,

DEAL_CREATE_TIMEVARCHAR2(50) PATH‘/USER_DEAL_INFO/DEAL_CREATE_TIME‘)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 SQL 语句解析成表及字段,可以通过解析 SQL 语句的关键词和语法结构来实现。 首先,需要使用语法解析器将 SQL 语句解析成语法树。然后,从语法树提取出所有的名和字段名,并将它们存储在一个数据结构,例如一个列或字典。 对于名,可以在语法树找到所有的引用节点,然后提取出其名。如果 SQL 语句使用的别名,也需要将其解析出来并与原名对应。 对于字段名,可以在语法树找到所有的列引用节点,然后提取出其的列名。如果 SQL 语句使用的别名或者列的别名,也需要将其解析出来并与原名或列名对应。 最后,将解析出来的名和字段名组合成一个数据结构返回即可。 示例代码: ```python import sqlparse def parse_sql(sql): # 解析 SQL 语句 parsed = sqlparse.parse(sql)[0] # 提取出所有的名和字段名 tables = [] columns = [] for token in parsed.flatten(): if token.ttype == sqlparse.tokens.Name: # 如果是名或者列名 name = str(token) if '.' in name: # 如果是带有名前缀的列名 table_name, column_name = name.split('.') columns.append((table_name, column_name)) else: # 如果是名或者不带有名前缀的列名 tables.append(name) elif token.ttype == sqlparse.tokens.Keyword and str(token).upper() == 'AS': # 如果是别名 name = str(token.parent) if '.' in name: # 如果是带有名前缀的别名 table_name, column_name = name.split('.') columns.append((table_name, column_name)) else: # 如果是不带有名前缀的别名 columns.append((tables[-1], name)) # 返回解析结果 return {'tables': tables, 'columns': columns} ``` 这个函数接受一个 SQL 语句作为输入,返回一个字典,包含解析出来的名和字段名。例如: ```python >>> sql = 'SELECT foo.id, bar.name AS bar_name FROM foo JOIN bar ON foo.id = bar.id' >>> parse_sql(sql) {'tables': ['foo', 'bar'], 'columns': [('foo', 'id'), ('bar', 'name')]} ``` 这个例子,解析出来的名是 `foo` 和 `bar`,解析出来的字段名是 `(foo, id)` 和 `(bar, name)`。可以看到,解析出来的结果包含了名和列名的对应关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值