Словарь к нижнему регистру в Python

В версиях ниже 12c Oracle DBMS_JOB и / или DBMS_SCHEDULER будет планировать выполнение хранимой процедуры. Он может создать файл, но для этого вам потребуется пакет UTL_FILE, а не SPOOL.

Поскольку вы работаете в Oracle 12c, его DBMS_SCHEDULER теперь предлагает новый тип задания - SQL_SCRIPT, который позволяет планировать сценарий .SQL. Это означает, что код, который вы разместили, должен быть сохранен в виде файла. Я не могу создать пример на своем 11gXE, но вот ссылка на сайт ORACLE-BASE : https://oracle-base.com/articles/12c/scheduler-enhancements-12cr1 [ 119] и скопированный из него скрипт, который показывает, как это сделать:

CONN test/test@pdb1

-- Create a job with a SQL*Plus script defined in-line,
-- including an explicit connect.
SET SERVEROUTPUT ON
DECLARE
  l_job_name VARCHAR2(30);
  l_script   VARCHAR2(32767);
BEGIN
  l_job_name := DBMS_SCHEDULER.generate_job_name;
  DBMS_OUTPUT.put_line('JOB_NAME=' || l_job_name);

  -- Notice the explicit database connection in the script.
  l_script := 'CONN test/test@pdb1
SPOOL /tmp/test.lst
SELECT SYSDATE, USER FROM dual;
SPOOL OFF';

  DBMS_SCHEDULER.create_job(
    job_name        => l_job_name,
    job_type        => 'SQL_SCRIPT',
    job_action      => l_script,
    credential_name => 'oracle_ol6_121',
    enabled         => TRUE
  );
END;
/

В качестве альтернативы, вы можете использовать программу планирования вашей операционной системы (Task Scheduler в MS Windows) и сказать ей запускать скрипт .BAT, который установит соединение SQL * Plus и запустит скрипт .SQL, который содержит команду SPOOL и оператор SELECT.

Забыл сказать: я бы не стал вовлекать в это SQL Developer.

45
задан Teifion 18 April 2009 в 21:23
поделиться

2 ответа

Вам нужно будет использовать либо цикл, либо понимание списка / генератора. Если вы хотите использовать все ключи и значения в нижнем регистре, вы можете сделать это ::

dict((k.lower(), v.lower()) for k,v in {'My Key':'My Value'}.iteritems())

Если вы хотите использовать только ключи только в нижнем регистре, вы можете сделать это ::

dict((k.lower(), v) for k,v in {'My Key':'My Value'}.iteritems())

Выражения генератора (использованные выше) часто полезны в создании словарей; Я использую их все время. Вся выразительность понимания цикла без лишних затрат памяти.

81
ответ дан 26 November 2019 в 21:02
поделиться

Нижеследующее идентично ответу Рика Копеланда, написанному без использования выражения генератора:

outdict = {}
for k, v in {'My Key': 'My Value'}.iteritems():
    outdict[k.lower()] = v.lower()

Выражения-генераторы, Понимание списков и (в Python 2.7 и более поздних версиях) - это в основном способы переписывания циклов.

В Python 2.7+ вы можете использовать словарное понимание (это одна строка кода, но вы можете переформатировать их, чтобы сделать его более понятным). readable):

{k.lower():v.lower()
    for k, v in
    {'My Key': 'My Value'}.items()
}

Они довольно часто более аккуратны, чем эквивалент цикла, так как вам не нужно инициализировать пустой dict / list / etc ... но, если вам нужно сделать что-то большее, чем один вызов функции / метода, они может быстро стать грязным.

14
ответ дан 26 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

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