我有Json文件,需要动态地将数据插入Oracle表。为此,表列和相应的jason数据列保存在一个查找表中。查找表的结构如下:Json_Column | Table_Column
在收到Json文件时,我从查找表中选择表列和对应的Json列,分别放入变量A和B中。这里B用来定义我们必须从Json文件中选择的值,A指的是我们在表中插入这些值的列。
为此,我使用了下面的查询
执行直接插入oracle_tbl("| |一个| |")值("| | B | |")的;
但是,我在err下面。ORA-00984:此处不允许列
最后,意识到错误是由于它没有从Json文件中获取数据。因为,B只返回列名,而不返回Json文件中相应的值。实际上,我需要变量b中提到的json列中的值。
请告诉我如何解决这个问题?
提前感谢。莫妮卡
Reading the Json data using below,
FOR ALL_REC1 IN (SELECT * FROM JSON_TABLE (PJSON_DATA,'$.ExcelData[*]'
COLUMNS ( Column1 NUMBER PATH '$.col1',
Column2 NUMBER PATH '$.col1'
)))
Column1 and Column2 are defined in variable B. But values of Column1 and Column2 are not picking in execute immediate.
执行"execute immediate ' insert into oracle_tbl('||A||') values ('||B||')';"是,
execute immediate ' insert into oracle_tbl(tbl_clo1, tbl_col2) values (column1, column2)';
但是column1和column2在Json文件中有值。它没有得到。
execute immediate ' insert into oracle_tbl(tbl_clo1, tbl_col2) values (value of column1, value of column2)';
也许这个例子会给你一些启发:
WITH colnames(column1, column2) AS
(
SELECT 'col1', 'col2' FROM DUAL
)
select
REPLACE(
REPLACE(
REPLACE(
REPLACE(
q'~INSERT INTO ora_table( {col1name}, {col2name} ) VALUES( '{col1value}', '{col2value}')~',
'{col1name}', c.column1
),
'{col2name}', c.column2
),
'{col1value}', t.c1
),
'{col2value}', t.c2
) AS sql
FROM colnames c,
JSON_TABLE(
q'~[ { "col1" : "v11", "col2": "v12" }, { "col1" : "v21", "col2": "v22" } ]~'
, '$[*]'
columns (
c1 VARCHAR2 PATH '$.col1',
c2 VARCHAR2 PATH '$.col2'
)
) t
;
Then "FOR rec IN…"循环查询并"execute immediate"rec.sql返回。