PL SQL:如何使用PATH连接循环变量

时间:2016-06-15 05:49:49

标签: oracle plsql xmltable

我正在使用以下PL SQL for循环将多个xml节点值插入表中:

'job['||I||']/job_name'

在上面的代码中,此连接PL/SQL: SQL Statement ignored PL/SQL: ORA-00907: missing right parenthesis无效。

显示错误

'job[1]/job_name' 但是,如果我使用像<role_list> <employee_id>123</employee_id> <job> <job_name>job1</job_name> </job> <job> <job_name>job2</job_name> </job> </role_list> 这样的常量,那么它的效果很好。  这是我的示例输入xml:

$(function() {
function reload(elem, interval) {
    var $elem = $(elem);
    var $original = $elem.html();
    $.ajax({
        cache: false,
        url: '/inbox-header.php',
        type: 'get',
        success: function(data) {
            var opgehaaldedata = data.replace(
                /(\r\n|\n|\r)/gm, "");
            var orgineledata = $original.replace(
                /(\r\n|\n|\r)/gm, "");
            if (opgehaaldedata == orgineledata) {
                //alert('a');
                setTimeout(function() {
                    reload(elem, interval)
                }, interval);
                return;
            } else {
                $elem.html(opgehaaldedata);
                setTimeout(function() {
                    reload(elem, interval)
                }, interval);
                return;
            }
        }
    });
}
reload('#inboxheader', 500);

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

SELECT X.EMP_ID, X.EMP_JOB 
        FROM XMLTABLE('/role_list/job[$count]'
        PASSING xmlData, I AS "count"
        COLUMNS  EMP_ID  VARCHAR2(10)     PATH   'employee_id',                                                        
                 EMP_JOB VARCHAR2(30)     PATH   'job_name'
        ) X;

答案 1 :(得分:0)

SET SERVEROUTPUT ON;
DECLARE
LV_X XMLTYPE := XMLTYPE('<STUDENT><NAME type="1">PRANEETH</NAME></STUDENT>');
LV_NAME VARCHAR2(200);
LV_NUMBER NUMBER := 1;
BEGIN
SELECT X.NAME
 INTO LV_NAME
        FROM XMLTABLE('/STUDENT,NAME[@type = $count]'
        PASSING LV_X, LV_NUMBER AS "count"
        COLUMNS  NAME  VARCHAR2(100)     PATH   'NAME'                                                     

        ) X;
        DBMS_OUTPUT.PUT_LINE(lv_namE);
END;
/
output :praneeth