CREATE SEARCH INDEX json_docs_search_idx ON json_documents (data) FOR JSON;
COLUMN path FORMAT A40
COLUMN type FORMAT A10
SELECT path,
type,
length
FROM user_json_dataguide_fields
WHERE table_name = 'JSON_DOCUMENTS'
AND column_name = 'DATA'
ORDER BY 1;
PATH TYPE LENGTH
---------------------------------------- ---------- ----------
$.features array 1024
$.features.geometry object 128
$.features.geometry.coordinates array 64
$.features.geometry.coordinates[*] number 32
$.features.geometry.type string 8
$.features.properties object 128
$.features.properties."marker-color" string 8
$.features.properties."marker-size" string 8
$.features.properties."marker-symbol" string 1
$.features.properties.name string 16
$.features.type string 8
$.type string 32
12 rows selected.
SQL>
SET LINESIZE 100 FEEDBACK ON PAGESIZE 1000 LONG 1000000
SELECT JSON_DATAGUIDE(data, dbms_json.format_hierarchical, DBMS_JSON.geojson + DBMS_JSON.pretty) dg_doc
FROM json_documents;
DG_DOC
--------------------------------------------------------------------------------
{
"type" : "object",
"properties" :
{
"type" :
{
"type" : "string",
"o:length" : 32,
"o:preferred_column_name" : "type"
},
"features" :
{
"type" : "array",
"o:length" : 1024,
"o:preferred_column_name" : "features",
"items" :
{
"properties" :
{
"type" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "type"
},
"geometry" :
{
"type" : "
GeoJSON
",
"o:length" : 64,
"o:preferred_column_name" : "geometry"
},
"properties" :
{
"type" : "object",
"o:length" : 128,
"o:preferred_column_name" : "properties",
"properties" :
{
"name" :
{
"type" : "string",
"o:length" : 16,
"o:preferred_column_name" : "name"
},
"marker-size" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "marker-size"
},
"marker-color" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "marker-color"
},
"marker-symbol" :
{
"type" : "string",
"o:length" : 1,
"o:preferred_column_name" : "marker-symbol"
}
}
}
}
}
}
}
}
1 row selected.
SQL>
BEGIN
DBMS_JSON.rename_column('json_documents', 'data', '$.type', DBMS_JSON.TYPE_STRING, 'FEATURE_COLLECTION_TYPE');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.geometry.type', DBMS_JSON.TYPE_STRING, 'FEATURE_GEOMETRY_TYPE');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.type', DBMS_JSON.TYPE_STRING, 'FEATURE_TYPE');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.geometry', DBMS_JSON.TYPE_STRING, 'GEOMETRY');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.properties."marker-size"', DBMS_JSON.TYPE_STRING, 'MARKER_SIZE');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.properties."marker-color"', DBMS_JSON.TYPE_STRING, 'MARKER_COLOR');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.properties."marker-symbol"', DBMS_JSON.TYPE_STRING, 'MARKER_SYMBOL');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.properties.name', DBMS_JSON.TYPE_STRING, 'NAME');
DBMS_JSON.rename_column('json_documents', 'data', '$.features.geometry.coordinates[*]', DBMS_JSON.TYPE_NUMBER, 'ARRAY_NUMBER');
END;
/
DROP VIEW json_documents_v1;
DECLARE
l_clob CLOB;
BEGIN
l_clob := DBMS_JSON.get_index_dataguide('json_documents', 'data', DBMS_JSON.format_hierarchical, DBMS_JSON.pretty);
DBMS_JSON.create_view(
viewname => 'json_documents_v1',
tablename => 'json_documents',
jcolname => 'data',
dataguide => l_clob);
END;
/
DESC json_documents_v1
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
ID NOT NULL RAW(16)
FEATURE_COLLECTION_TYPE VARCHAR2(32)
FEATURE_TYPE VARCHAR2(8)
FEATURE_GEOMETRY_TYPE VARCHAR2(8)
NAME VARCHAR2(16)
MARKER_SIZE VARCHAR2(8)
MARKER_COLOR VARCHAR2(8)
MARKER_SYMBOL VARCHAR2(1)
ARRAY_NUMBER NUMBER
SQL>
DROP VIEW json_documents_v1;
DECLARE
l_clob CLOB;
BEGIN
SELECT JSON_DATAGUIDE(data, dbms_json.format_hierarchical, DBMS_JSON.geojson + DBMS_JSON.pretty)
INTO l_clob
FROM json_documents;
DBMS_JSON.create_view(
viewname => 'json_documents_v1',
tablename => 'json_documents',
jcolname => 'data',
dataguide => l_clob);
END;
/
DECLARE
*
ERROR at line 1:
ORA-00918: column ambiguously defined
ORA-06512: at "XDB.DBMS_JSON", line 597
ORA-06512: at "XDB.DBMS_JSON", line 1056
ORA-06512: at line 8
SQL>
DROP VIEW json_documents_v1;
DECLARE
l_clob CLOB;
BEGIN
SELECT JSON_DATAGUIDE(data, dbms_json.format_hierarchical, DBMS_JSON.geojson + DBMS_JSON.pretty)
INTO l_clob
FROM json_documents;
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "type"', '"o:preferred_column_name" : "FEATURE_COLLECTION_TYPE"', 1, 1);
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "type"', '"o:preferred_column_name" : "FEATURE_TYPE"', 1, 1);
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "geometry"', '"o:preferred_column_name" : "GEOMETRY"', 1, 1);
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "name"', '"o:preferred_column_name" : "NAME"', 1, 1);
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "marker-size"', '"o:preferred_column_name" : "MARKER_SIZE"', 1, 1);
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "marker-color"', '"o:preferred_column_name" : "MARKER_COLOR"', 1, 1);
l_clob := REGEXP_REPLACE(l_clob, '"o:preferred_column_name" : "marker-symbol"', '"o:preferred_column_name" : "MARKER_SYMBOL"', 1, 1);
DBMS_JSON.create_view(
viewname => 'json_documents_v1',
tablename => 'json_documents',
jcolname => 'data',
dataguide => l_clob);
END;
/
DESC json_documents_v1
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
ID NOT NULL RAW(16)
FEATURE_COLLECTION_TYPE VARCHAR2(32)
FEATURE_TYPE VARCHAR2(8)
GEOMETRY MDSYS.SDO_GEOMETRY
NAME VARCHAR2(16)
MARKER_SIZE VARCHAR2(8)
MARKER_COLOR VARCHAR2(8)
MARKER_SYMBOL VARCHAR2(1)
SQL>
SELECT geometry FROM json_documents_v1;
GEOMETRY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
----------------------------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(-.15380859, 51.5053234, NULL), NULL, NULL)
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(-1.8896484, 52.4660504, NULL), NULL, NULL)
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(-6.2731934, 53.3571087, NULL), NULL, NULL)
3 rows selected.
SQL>