【发布时间】:2015-08-25 17:01:52
【问题描述】:
我有一个 PL/SQL 函数来解析我的 XML 块并将其返回到 VARCHAR 变量中。
我的 XML 块并不太复杂。只有 14 个标签,没有任何重复结构。
在我的函数中,我做了这个 XMLType 操作:
SELECT px_Header
|| 'R5'
|| RPAD (NVL (A1, ' '), 2)
|| RPAD (NVL (A2, ' '), 10)
|| RPAD (NVL (A3, ' '), 3)
|| RPAD (NVL (A4, ' '), 1)
|| RPAD (NVL (A5, ' '), 1)
|| RPAD (NVL (A6, ' '), 10)
|| RPAD (NVL (A7, ' '), 1)
|| RPAD (NVL (A8, ' '), 8)
|| RPAD (NVL (A9, ' '), 1)
|| RPAD (NVL (A10, ' '), 16)
|| RPAD (NVL (A11, ' '), 2)
|| RPAD (NVL (A12, ' '), 8)
|| RPAD (NVL (A13, ' '), 1)
|| RPAD (NVL (A14, ' '), 1)
|| CHR (13)
|| CHR (10)
INTO lv_return
FROM XMLTABLE (
'/IN_DATA'
PASSING px_Block
COLUMNS A1 VARCHAR2 (2) PATH 'A1',
A2 VARCHAR2 (10)
PATH 'A2',
A3 VARCHAR2 (3) PATH 'A3',
A4 VARCHAR2 (1) PATH 'A4',
A5 VARCHAR2 (1)
PATH 'A5',
A6 VARCHAR2 (10)
PATH 'A6',
A7 VARCHAR2 (1)
PATH 'A7',
A8 VARCHAR2 (8) PATH 'A8',
A9 VARCHAR2 (1)
PATH 'A9',
A10 VARCHAR2 (16)
PATH 'A10',
A11 VARCHAR2 (2)
PATH 'A11',
A12 VARCHAR2 (8)
PATH 'A12',
A13 VARCHAR2 (1)
PATH 'A13',
A14 VARCHAR2 (1)
PATH 'A14');
这个函数需要 0.0945 秒来执行。没那么多,我想。但是我的过程需要迭代100000次,所以我调用这个函数100000次。
有没有更快的方法来实现这一点,即使只有千分之几秒?
【问题讨论】:
-
对我来说看起来很简单。您说“函数”,但这只是一个选择语句。我假设您省略了一些代码?这个怎么称呼?
-
你说你有一个需要 x 秒的函数,但你只向我们展示了一个 select 语句。你怎么知道 select 语句是瓶颈?恐怕你只是在猜测。
-
当我说我有一个功能时,是因为我有......一个功能。该函数内的代码就是这个简单的选择语句。该函数的其余代码是 return lv_return 语句。就这么简单。是的......我已经衡量了这个声明的表现,如果我可以改变它,我现在想这样做。当然,我的流程中有越来越多的代码,但我不只是专注于此。