Я хочу преобразовать все таблицы из указанного c пользователя в JSON (или XML) формат. Я читал о "хитрости", упомянутой SQL Developer.
Другими словами, я уже начал создавать процедуру с двумя параметрами:
- p_format: формат (в моем случае это будет "json")
- p_user: имя пользователя
В качестве IDE я использую Oracle SQL Developer и моя база данных - Oracle База данных XE .
Сначала процедура зацикливается, хотя все таблицы данного пользователя и в l oop, должны выполнить следующее:
SELECT /*p_format*/ * FROM p_user || '.' || table
К сожалению, я не могу использовать это утверждение SELECT, как упомянуто выше. Мне нужно использовать команду EXECUTE IMMEDIATE <Statement>
.
Следующая проблема, с которой я столкнулся, заключалась в следующем: я хотел вывести результат команды EXECUTE IMMEDIATE
. Поэтому я использовал команду EXECUTE IMMEDIATE <Statement> INTO <Variable>
. После компиляции процедуры и ее выполнения я наткнулся на следующую ошибку:
"inconsistent datatypes: expected %s got %s"
Это мой код процедуры:
CREATE OR REPLACE PROCEDURE EXPORT_TABLE_TO_FORMAT_FROM(p_format VARCHAR2, p_user VARCHAR2) IS
/***************************************************************************
Author:
Class:
School:
Date:
Function - EXPORT_TABLE_TO_JSON_FROM(p_user):
Displays the data of every table from a given User as JSON
Parameter: p_user ... User
***************************************************************************/
v_tableData VARCHAR2(32767);
v_sqlStatement VARCHAR2(200);
BEGIN
FOR tablerec IN (SELECT *
FROM ALL_TABLES
WHERE OWNER = p_user)
LOOP
v_sqlStatement := 'SELECT /*' || p_format || '*/ * FROM ' || p_user || '.' || tablerec.TABLE_NAME;
EXECUTE IMMEDIATE v_sqlStatement INTO v_tableData;
DBMS_OUTPUT.PUT_LINE (v_sqlStatement);
END LOOP;
END;
Вы видите, что я l oop хотя все таблицы данного пользователя и создали оператор sql с p_format
и p_user
и с tablerec.TABLE_NAME
.
Желаемый результат должен выглядеть точно так:
{"results":[{"columns":[{"name":"COUNTRY_ID","type":"CHAR"},
{"name":"COUNTRY_NAME","type":"VARCHAR2"},{"name":"REGION_ID","type":"NUMBER"}],"items":
[
{"country_id":"AR","country_name":"Argentina","region_id":2},
{"country_id":"AU","country_name":"Australia","region_id":3},
{"country_id":"BE","country_name":"Belgium","region_id":1},
{"country_id":"BR","country_name":"Brazil","region_id":2},
{"country_id":"CA","country_name":"Canada","region_id":2},
{"country_id":"CH","country_name":"Switzerland","region_id":1},
{"country_id":"CN","country_name":"China","region_id":3},
{"country_id":"DE","country_name":"Germany","region_id":1},
{"country_id":"DK","country_name":"Denmark","region_id":1},
{"country_id":"EG","country_name":"Egypt","region_id":4},
{"country_id":"FR","country_name":"France","region_id":1},
{"country_id":"IL","country_name":"Israel","region_id":4},
{"country_id":"IN","country_name":"India","region_id":3},
{"country_id":"IT","country_name":"Italy","region_id":1},
{"country_id":"JP","country_name":"Japan","region_id":3},
{"country_id":"KW","country_name":"Kuwait","region_id":4},
{"country_id":"ML","country_name":"Malaysia","region_id":3},
{"country_id":"MX","country_name":"Mexico","region_id":2},
{"country_id":"NG","country_name":"Nigeria","region_id":4},
{"country_id":"NL","country_name":"Netherlands","region_id":1},
{"country_id":"SG","country_name":"Singapore","region_id":3},
{"country_id":"UK","country_name":"United Kingdom","region_id":1},
{"country_id":"US","country_name":"United States of America","region_id":2},
{"country_id":"ZM","country_name":"Zambia","region_id":4},
{"country_id":"ZW","country_name":"Zimbabwe","region_id":4}]}]}