Предотвращение sqlplus усечение имен столбцов, без форматирования отдельного столбца

Хорошо, тебе это понравится. Это случилось со мной и сегодня. Точно такая же вещь. Я почти уверен, что лазурная команда где-то щелкнула выключателем, и мы провалились.

Я нашел этот неясный ответ без голосов, и он добился цели (с небольшим дополнительным обманом)

БОНУС ! это также устраняло проблемы с маршрутизатором, которые у меня были только на развернутом сайте (не локальном):

Credit: @stormwild: Документы по умолчанию, не обслуживаемые в веб-приложении узла, размещенном в Azure

Из сообщения @ stormwild см. Здесь: https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/# NodeHome

Шаги:

  1. Перейдите на портал Azure, выберите службу приложений и запустите ssh
  2. List item [ 112]
  3. В терминале ssh перейдите через командную строку к / home / site / wwwroot
  4. и создайте там index.js со следующим кодом:

    var express = require ('express');

    var server = express ();

    var options = {

    index: 'index.html'

    };

    server.use ('/', express.static ('/ home / site / wwwroot', options));

  5. ПРИМЕЧАНИЕ. Обязательно запустите npm install - сохраните также и в этой папке, иначе ваш сервис приложений будет аварийно завершать работу при запуске

  6. [1 125] Обязательно перезапустите службу приложения, если это не происходит автоматически

6
задан Chris Noe 9 December 2008 в 02:59
поделиться

2 ответа

Одна вещь, которую можно попробовать, состоит в том, чтобы динамично генерировать "команды" формата a20 столбца x. Что-то как следующее:

set termout off
set feedback off

spool t1.sql
select 'column ' || column_name || ' format a' || data_length
from all_tab_cols
where table_name='YOUR_TABLE'
/
spool off

@t1.sql
set pagesize 24
set heading on
spool result.txt
select * 
from  YOUR_TABLE;
and   rownum < 30;
spool off

Обратите внимание, что этот образец будет только работать с VARCHAR2. Необходимо было бы добавить, декодируют, например, для изменения сгенерированной команды "столбца" для ДАТ или ЧИСЕЛ.

ОБНОВЛЕНИЕ: оказывается, что исходный SQL действительно не изменяет поведение SQL*Plus. Единственная вещь, о которой я мог думать, состоит в том, чтобы переименовать имена полей к одному A значений символа, B, C, и т.д. следующим образом:

select 'column ' || column_name ||
       ' heading "' ||
       chr(ascii('A') - 1 + column_id) ||
       '"'
from all_tab_cols
where table_name='YOUR_TAB_NAME'

Это генерирует вывод, подобный:

column DEPT_NO heading "A"
column NAME heading "B"
column SUPERVIS_ID heading "C"
column ADD_DATE heading "D"
column REPORT_TYPE heading "E"
3
ответ дан 10 December 2019 в 02:55
поделиться

Я не думаю, что sqlplus предлагает функциональность, которую Вы запрашиваете. Вы смогли автоматизировать форматирование, с помощью своего рода языка сценариев, такого как Perl или Python. Другими словами, запросите ALL_TAB_COLS представление для схемы и таблицы, и затем создает сценарий динамично с атрибутом столбца формата. Это будет только работать, конечно, если у Вас будет разрешение запросить представление ALL_TAB_COLS (или некоторый другой эквивалент).

Это - быстрое подтверждение концепции, которое я бросил вместе:

#!/usr/bin/python

import sys
import cx_Oracle

response=raw_input("Enter schema.table_name:  ")
(schema, table) = response.split('.')
schema = schema.upper()
table = table.upper()
sqlstr = """select column_name,
                   data_type,
                   data_length
              from all_tab_cols
             where owner      = '%s'
               and table_name = '%s'""" % ( schema, table )

## open a connection to databases...
try:
    oracle = cx_Oracle.Connection( oracleLogin )
    oracle_cursor = oracle.cursor()

except cx_Oracle.DatabaseError, exc:
    print "Cannot connect to Oracle database as", oracleLogin
    print "Oracle Error %d:  %s" % ( exc.args[0].code, exc.args[0].message )
    sys.exit(1)

try:
    oracle_cursor.execute( sqlstr )

    # fetch resultset from cursor
    for column_name, data_type, data_length in oracle_cursor.fetchmany(256):
        data_length = data_length + 0
        if data_length < len(column_name):
            if data_type == "CHAR" or data_type == "VARCHAR2":
                print "column %s format a%d" % ( column_name.upper(), len(column_name) )
            else:
                print "-- Handle %s, %s, %d" % (column_name, data_type, data_length)

except cx_Oracle.DatabaseError, e:
    print "[Oracle Error %d: %s]:  %s" % (e.args[0].code, e.args[0].message, sqlstr)
    sys.exit(1)

try:
    oracle_cursor.close()
    oracle.close()
except cx_Oracle.DatabaseError, exc:
    print "Warning: Oracle Error %d:  %s" % ( exc.args[0].code, exc.args[0].message )

print "select *"
print "from %s.%s" % ( schema, table )
1
ответ дан 10 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: