Означает ли выполнение сценария, что все мои поля становятся типом данных VARCHAR2?

Я запускаю скрипт в Toad для Oracle. У меня есть два основных варианта запуска скрипта:

Горячая клавиша F9: выполнить инструкцию
Горячая клавиша F5: выполнить как скрипт

«Execute Statement» вернет мои поля с типом данных, который я ожидаю от них (например, поля NUMBER выводятся как поля NUMBER).

Но «Выполнить как сценарий» возвращает все мои поля с типом данных VARCHAR2. Даже поля, которые определенно имеют тип данных NUMBER, заканчиваются как VARCHAR2. Я могу буквально запустить один и тот же скрипт с помощью F9, а затем F5 и увидеть, что он возвращает разные типы данных.

Поэтому мой первый вопрос заключается в том, ведет ли это себя так, как задумано. И, если это предназначено, то мой второй вопрос заключается в том, как я могу избежать того, чтобы все мои типы данных были VARCHAR2 при использовании «Выполнить как сценарий». Мне нужно использовать «Выполнить как сценарий», потому что я использую переменные связывания.

Изменить: например, если бы у меня была такая таблица:

TBL_PAID_DATA

╔══════════╦══════════╗
║ employee ║ paid_amt ║
╠══════════╬══════════╣
║ Sam      ║     1500 ║
║ Sam      ║      200 ║
║ Sam      ║      150 ║
║ Lisa     ║      500 ║
║ Lisa     ║      430 ║
║ Bart     ║      700 ║
║ Donald   ║      840 ║
╚══════════╩══════════╝

И был такой скрипт:

SELECT employee, sum(paid_amt)
FROM TBL_PAID_DATA
GROUP BY employee

Затем поле сотрудника возвращается как VARCHAR2 как при «Выполнении как сценария», так и при «Выполнении инструкции». Однако sum(paid_amt) возвращается как VARCHAR2, когда я «Выполняю как сценарий», и как ЧИСЛО, когда я «Выполняю оператор». Я ожидал, что sum(paid_amt) всегда будет возвращаться с типом данных NUMBER.


person LetEpsilonBeLessThanZero    schedule 12.10.2017    source источник
comment
что вы имеете в виду, возвращая все мои поля? что делает ваш скрипт? (dbms_output? вставка в базу данных?) Можете ли вы показать код?   -  person tbone    schedule 12.10.2017
comment
В предположении, что оператор Execute возвращает набор результатов в Toad, который затем отображается в его пользовательском интерфейсе с использованием собственного форматирования. Execute as Script выполняется в среде стиля SQL/Plus, а Oracle форматирует вывод и возвращает вывод консоли в виде строки.   -  person MT0    schedule 12.10.2017
comment
Что произойдет, если перед вы запрашиваете, когда запускаете его как скрипт? Если у вас есть столбец SALARY, попробуйте поместить его в строку перед запросом COLUMN SALARY FORMAT $99,990.00 и посмотрите, изменит ли он вывод.   -  person MT0    schedule 12.10.2017
comment
@tbone Извинения. Я отредактировал свой вопрос, включив в него некоторые фиктивные данные и запрос, чтобы дать контекст тому, о чем я говорю.   -  person LetEpsilonBeLessThanZero    schedule 12.10.2017
comment
Как вы находите тип данных столбцов, когда выполняете его как скрипт?   -  person MT0    schedule 12.10.2017
comment
Извините, мне нужно больше кофе. Вы говорите, что sum(paid_amt) возвращается как varchar2. Вы выбираете переменную с помощью pl/sql? Вы просто выводите на консоль (вывод скрипта)? Куда вы возвращаетесь и где вы видите именно это, помеченное как varchar2?   -  person tbone    schedule 12.10.2017
comment
@MT0 Спасибо за идею. Я только что попытался использовать директиву форматирования столбца, и хотя форматирование в сетке данных изменилось, тип данных по-прежнему VARCHAR2, а не NUMBER.   -  person LetEpsilonBeLessThanZero    schedule 12.10.2017
comment
@tbone Извините, если я неправильно использую терминологию. Достаточно ли сказать, что когда я запускаю этот запрос, тип данных sum(paid_amt) будет VARCHAR2 или NUMBER в зависимости от того, запускаю ли я F5 или F9? Весь запрос можно увидеть в моем вопросе. Я вижу типы данных, используя мастер экспорта набора данных... и нажимая "Маскирование данных..." в левом нижнем углу окна мастера. Мои числовые поля с типом данных VARCHAR2 представляют собой проблему для меня, поскольку мне нужно экспортировать эти данные в Excel, и я не могу легко выполнять вычисления с числами, хранящимися в виде текста в Excel.   -  person LetEpsilonBeLessThanZero    schedule 12.10.2017
comment
@ MT0 Я нахожу тип данных с помощью мастера экспорта данных .... В левом нижнем углу экрана есть кнопка Data Masking..., которая указывает тип данных для каждого поля. Я также вижу, что мои числовые поля экспортируются в Excel в виде текстовых столбцов с помощью того же мастера экспорта данных....   -  person LetEpsilonBeLessThanZero    schedule 12.10.2017


Ответы (1)


Я считаю, что это так, потому что F5 выполняется как скрипт, поэтому результат собирается из sqlplus в виде текста.

Таким образом, решение состоит в том, чтобы скопировать / вставить результат в текстовый файл и использовать инструмент импорта csv, такой как Open-office Calc, где вы можете преобразовать свои данные в числовые и выполнить дальнейшие вычисления.

person J. Chomel    schedule 12.10.2017
comment
Спасибо за этот ответ. Всего одно редакционное примечание: я думаю, вы имеете в виду F5. Я только что попробовал ваше предложение и могу подтвердить, что оно работает. Я экспортировал вывод в файл .txt с разделителями табуляции и использовал мастер импорта txt Excel. Это решение, но оно не такое элегантное, как я надеюсь. Я надеялся, что смогу решить эту проблему с помощью Toad, а не делать что-то вроде ручного шага в Excel каждый раз, когда я хочу экспортировать данные. Я просто подожду, чтобы узнать, есть ли у кого-нибудь другие идеи, но если я не увижу их в ближайшее время, я приму ваш ответ. - person LetEpsilonBeLessThanZero; 12.10.2017