| id | firstname | lastname | age |
| -- | --------- | -------- | --- |
| 1 | John | Smith | 10 |
| 2 | Jane | Smith | 12 |
| 3 | Bob | White | 13 |
| 4 | Betty | White | 11 |
ORA-00904: "PERSON"."FIRSTNAME": invalid identifier
其他方法:
SELECT
id,
person.firstName,
person.lastName,
person.age
FROM
table
我觉得有一个简单的方法可以查询此问题,但是我在堆栈溢出和Google上搜索到了远处的空白。
说:
您的数据是有效的JSON(您的数据不是您的,但您可能已经误入它了,您说您的查询与其他编辑器一起使用,这使其似乎应该是一种已知格式);和
您正在连接到Oracle数据库(SQL Developer通常与Oracle数据库一起使用,但可以连接到其他数据库)然后在列名之前使用表名称/别名:
或使用
JSON_TABLE
SELECT id,
j.*
FROM table_name t
CROSS APPLY JSON_TABLE(
t.person,
'$'
COLUMNS (
firstname VARCHAR2(20) PATH '$.firstName',
lastname VARCHAR2(20) PATH '$.lastName',
age NUMBER PATH '$.age'
)
) j;
firstName
值的引号):
CREATE TABLE table_name (
id NUMBER PRIMARY KEY,
person CLOB CHECK (person IS JSON)
);
INSERT INTO table_name (id, person)
SELECT 1, '{"firstName":"John","lastName":"Smith","age":"10"}' FROM DUAL UNION ALL
SELECT 2, '{"firstName":"Jane","lastName":"Smith","age":"12"}' FROM DUAL UNION ALL
SELECT 3, '{"firstName":"Bob","lastName":"White","age":"13"}' FROM DUAL UNION ALL
SELECT 4, '{"firstName":"Betty","lastName":"White","age":"11"}' FROM DUAL;
输出:
Id
firstnamelastname
匠 | |||
---|---|---|---|
3 | Bob | 白 | |
4 | |||
Fiddle |