powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать ограничения в типе pl/sql?
10 сообщений из 10, страница 1 из 1
Как сделать ограничения в типе pl/sql?
    #39683809
AnnitaBells
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать тип такой: number от 0 до 20. Чтобы была проверка при присвоении переменной. Если нет - бросать исключение.
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39683815
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBellsКак сделатьПочитать инструкцию
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39683827
AnnitaBells
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

которую? Там тонна же всего. Дайте ссылочку, плз.
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39683853
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39683869
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBells,

Хотя чистый number от 0 до 20 задать не удастся. Range доступен только для pls_integer или его сабтайпов. Что подразумевает ограничение на целочисленность.
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/block.html#GUID-9ACEB9ED-567E-4E1A-A16A-B8B35214FC9D Restriction on RANGE high_value .. low_value

Specify this clause only if base_type is PLS_INTEGER or a subtype of PLS_INTEGER (either predefined or user-defined)
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39683907
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnnitaBellsХочу сделать тип такой: number от 0 до 20


можно любую логику проверки заложить в pl/sql функцию. И исключения оттуда же возвращать.
Или так не интересно?
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39683950
AnnitaBells
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
merchAnnitaBellsХочу сделать тип такой: number от 0 до 20


можно любую логику проверки заложить в pl/sql функцию. И исключения оттуда же возвращать.
Или так не интересно?

Так и сделала. Спасибо.

AmKad,
спасибо за интересный вариант!
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39684014
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
SQL> CREATE OR REPLACE
  2    TYPE NUMBER_0_20
  3      AS OBJECT (
  4                 N NUMBER,
  5                 CONSTRUCTOR FUNCTION NUMBER_0_20(
  6                                                  SELF IN OUT NOCOPY NUMBER_0_20,
  7                                                  N NUMBER
  8                                                 )
  9                   RETURN SELF AS RESULT
 10                )
 11  /

Type created.

SQL> CREATE OR REPLACE
  2    TYPE BODY NUMBER_0_20
  3      AS
  4        CONSTRUCTOR FUNCTION NUMBER_0_20(
  5                                         SELF IN OUT NOCOPY NUMBER_0_20,
  6                                         N NUMBER
  7                                        )
  8                   RETURN SELF AS RESULT
  9          IS
 10          BEGIN
 11              IF NVL(N,1) BETWEEN 0 AND 20
 12                THEN
 13                  SELF.N := N;
 14                  RETURN;
 15              END IF;
 16              RAISE_APPLICATION_ERROR(
 17                                      -20500,
 18                                      'Value must be between 0 and 20.'
 19                                     );
 20        END;
 21  END;
 22  /

Type body created.

SQL> set numwidth 20
SQL> SELECT  NUMBER_0_20(3.141592653589793238)
  2    FROM  DUAL
  3  /

NUMBER_0_20(3.141592653589793238)(N)
-----------------------------------------------------------------------------------------------------------------
NUMBER_0_20(3.141592653589793238)

SQL> SELECT  NUMBER_0_20(55)
  2    FROM  DUAL
  3  /
SELECT  NUMBER_0_20(55)
        *
ERROR at line 1:
ORA-20500: Value must be between 0 and 20.
ORA-06512: at "SCOTT.NUMBER_0_20", line 15


SQL> 



SY.
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39684048
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Как сделать ограничения в типе pl/sql ?

....
stax
...
Рейтинг: 0 / 0
Как сделать ограничения в типе pl/sql?
    #39684301
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxКак сделать ограничения в типе pl/sql ?


Дробные похоже никак.

SY.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать ограничения в типе pl/sql?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]