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

которую? Там тонна же всего. Дайте ссылочку, плз.
...
Рейтинг: 0 / 0
06.08.2018, 17:21
    #39683853
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ограничения в типе pl/sql?
...
Рейтинг: 0 / 0
06.08.2018, 17:47
    #39683869
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ограничения в типе pl/sql?
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
06.08.2018, 18:40
    #39683907
merch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ограничения в типе pl/sql?
AnnitaBellsХочу сделать тип такой: number от 0 до 20


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


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

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

AmKad,
спасибо за интересный вариант!
...
Рейтинг: 0 / 0
07.08.2018, 01:04
    #39684014
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ограничения в типе pl/sql?
Код: 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
07.08.2018, 08:31
    #39684048
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ограничения в типе pl/sql?
SY,

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

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


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

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


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