Создание вложенной таблицы в Oracle 11g с помощью cx_Oracle в Python - PullRequest
0 голосов
/ 24 августа 2018

Мне нужна таблица со столбцами account name,account id,date created,balance & address. В этом имени учетной записи есть 2 столбца с именем first name & last name & address, имеет 5 столбцов line1,line2,city,state,pincode. Использует ли вложенные таблицы лучший способ для достижения этой цели?

Я пытался создать вложенную таблицу для oracle-11g, используя модуль cx_Oracle в python, но это дало мне ошибку, и я не могу ее решить. Код как ниже:

`self.CUR.execute(""" CREATE TYPE ADDRESS_SUB_COLUMNS AS OBJECT(
                             line1   VARCHAR2(30),
                             line2   VARCHAR2(30),
                             city    VARCHAR2(20),
                             state   VARCHAR2CHAR(10),
                             zip     CHAR(6) 
                             );
                             /""")

        self.CUR.execute(""" CREATE TYPE ADDRESS_TABLE IS TABLE OF ADDRESS_SUB_COLUMNS;
                             /""")

        self.CUR.execute("""CREATE TABLE CUSTOMERS (
                             custid  VARCHAR2(14),
                             address ADDRESS_TABLE )NESTED TABLE address STORE AS customer_addresses""")`

ошибка, которую я получил:

`Traceback (most recent call last):
  File "python/home.py", line 386, in <module>
    menuObject = mainMenu()
  File "python/home.py", line 133, in __init__
    super().__init__(self.cur)  #Call to constructor in parent2 (TABLE_USERS) : passing cur from parent1
  File "python/home.py", line 72, in __init__
    self.createTable()
  File "python/home.py", line 93, in createTable
    /""")
cx_Oracle.DatabaseError: ORA-06545: PL/SQL: compilation error - compilation aborted
ORA-06550: line 8, column 30:
PLS-00103: Encountered the symbol "/" The symbol "/" was ignored.
ORA-06550: line 0, column 0:
PLS-00565: ADDRESS_SUB_COLUMNS must be completed as a potential REF target (object type

) `

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 05 сентября 2018

Символ "/" - это терминатор команды SQL * Plus. Вы не можете использовать его в cx_Oracle. Попробуйте

self.CUR.execute(""" CREATE TYPE ADDRESS_SUB_COLUMNS AS OBJECT(
                             line1   VARCHAR2(30),
                             line2   VARCHAR2(30),
                             city    VARCHAR2(20),
                             state   VARCHAR2CHAR(10),
                             zip     CHAR(6) 
                             );""") 

Я позволю вопросу «лучший» быть упражнением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...