Questions tagged [plsql]

PL/SQL (Procedural Language/Structured Query Language) язык программирования, процедурное расширение языка SQL, разработанное корпорацией Oracle. Вопросы о PL/SQL следует так же помечать тегом "oracle".

PL/SQL (Procedural Language/Structured Query Language) язык программирования, процедурное расширение языка SQL, разработанное корпорацией Oracle.Базируется на языке Ада.

PL/SQL даёт возможность использовать переменные, операторы, массивы, курсоры и исключения. Начиная с версии 8 доступна и объектно-ориентированная модель. PL/SQL встроен в СУБД Oracle начиная с 7 версии.

Стандартный SQL является специализированным декларативным языком программирования. На язык наложены определённые ограничения, такие как, например, отсутствие прямой поддержки циклов.

PL/SQL же, как полный по Тьюрингу язык, позволяет разработчикам обрабатывать данные в реляционной базе, используя императивный стиль программирования.

Операторы SQL могут быть легко вызваны непосредственно из PL/SQL-процедуры, функции или триггера (иногда с некоторыми ограничениями).

Язык PL/SQL позволяет определять следующие типы именованных блоков:

  • процедуры;
  • функции;
  • объекты;
  • пакеты.

Все они могут быть скомпилированы и сохранены в схеме базы данных. Все именованные блоки кода, кроме пакетов, не хранят внутреннее состояние от вызова к вызову.

Язык PL/SQL поддерживает следующие категории типов:

  • встроенные типы данных, включая коллекции и записи;
  • скалярные;
  • составные;
  • ссылочные;
  • LOB-типы;
  • объектные типы данных.
743 questions
1
vote
1 answer

insert into table

как из этой таблицы вставить данные в таблицу с соответсвующими полями, чтобы было вот так:
1
vote
1 answer

как пропарсить xmltable

select * from xmltable('pay_doc' passing xmltype( ' 18545885 4
0
votes
2 answers

pl/sql условный оператор

Подскажите пожалуйста что означает MOD(s, 2) = 1 Буду благодарна за помощь BEGIN DBMS_OUTPUT.enable; LOOP IF(MOD(s, 2) = 1) THEN GOTO LESS; END IF; DBMS_OUTPUT.put_line(TO_CHAR(s)||' is even!'); <> EXIT WHEN…
0
votes
1 answer

ORA-00972: слишком длинный идентификатор

Привет. Знаю что эта ошибка говорит о наличии идентификаторов более 30 символов. Но вот запрос. Здесь нет таких длинных имен. Однако oracle ругается. Подскажите, почему? select Distinct CS.DG_CODETOFK as "Код ТОФК", CS.DG_CODEGRBSPPP as "Код…
0
votes
0 answers

Разбить колонку на 6 столбцов в plsql

Необходимо разбить колонку на 6 столбцов. Точки с запятыми с ; - ;;;;;;; указывают границы. В 5 столбце нужно учитывать следующее правило - между ;;;; и ;;;;; где DЦЦБ необходимо брать B50787. Програм…
wq55
  • 493
0
votes
1 answer

PL\SQL Функция не выводит текст

помогите пожалуйста, функция должна выводить либо номер телефона либо текст 'Нет телефона', телефон выводит а текст нет, помогите разобраться что не так :( return VARCHAR2 is pnumber VARCHAR2(100); begin select case when max(b.phone_number) is…
0
votes
1 answer

Создать диапазон из дат

Помогите пожалуйста собрать одинокие даты в отдельные диапазоны по условию,что даты должны идти друг за другом,если не идут,то начинается другой диапазон. Пример дат: with cte as ( select to_date ('01.01.2023') as dt from dual union all select…
0
votes
0 answers

Выбрать строку с крайней датой через where. PL/SQL

Есть длинный запрос, в результате которого мы можем получить дубликаты во всех столбцах кроме одного-двух. Можно ли через where (принципиально важно именно в where) задать выборку по последней дате? Подробнее в скриноште. Как выбрать в общем запросе…
tennant993
  • 19
  • 5
0
votes
1 answer

Размножить строку с увеличением числа в строке

Всем привет. Дана таблица в которой есть число и кол-во. with cte as (select 1 numb ,4 quantity from dual) Суть задачи в том, чтобы разбить строку на количество (4) при этом к каждой строке к столбцу число добавлять…
0
votes
0 answers

Процент от числа с помощью case

Как получить в результат f10=0,0%, если f9=null и в f1=19. В f10 считается по формуле f9/f1 * 100 В представленной выдержки из запроса Если в f9 в результате null то в f10 получается ,0%. А нужно 0,0%. В других вариантах получается как надо,…
wq55
  • 493
0
votes
1 answer

Повторное выполение запроса если предыдущий результат ничего не вернул

Можно ли изменит запрос так, что бы если результат его выполнения ничего не возвращает он выполнялся без учета одного из параметров. Для примера я написал запрос: select * from students s where s.group_id = decode( :group_id , null, d.group_id ,…
0
votes
1 answer

как использовать значение переменной при конкатенации?

Подскажите, каким образом использовать значение переменной при конкатенации? Пробую примерно так: v_val NUMBER; v_val := 0; select count(1) into v_val from table1; insert into table2 (SYSDATE, 1, concat('количество строк = ' , (select…
95e
  • 1