Окончание табл. 4.3
1 |
2 |
TO_CHAR |
SET SERVEROUTPUT ON |
TO_NCHAR |
DECLARE |
|
n integer:=1009; |
|
ch char(5); |
|
ch1 nchar(5); |
|
BEGIN |
|
ch:=TO_CHAR(n); |
|
ch1:=TO_NCHAR(n); |
|
DBMS_OUTPUT.PUT_LINE( ch ); |
|
DBMS_OUTPUT.PUT_LINE( ch1 ); |
|
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'SSSSS')); |
|
END; |
TO_DATE |
SET SERVEROUTPUT ON |
|
DECLARE |
|
ch char(11):='21-дек-1980'; |
|
ch1 char(11):='05-30-1990'; |
|
BEGIN |
|
DBMS_OUTPUT.PUT_LINE(TO_DATE(ch, 'dd-mon-yyyy')); |
|
DBMS_OUTPUT.PUT_LINE(TO_DATE(ch1, 'mm-dd- |
|
yyyy')); |
|
END; |
TO_NUMBER |
SET SERVEROUTPUT ON |
|
DECLARE |
|
n int:=1029; num number(4,0); num1 number(4,-1); |
|
BEGIN |
|
num:=TO_NUMBER(n); num1:=TO_NUMBER(n); |
|
DBMS_OUTPUT.PUT_LINE(num); |
|
DBMS_OUTPUT.PUT_LINE(num1); |
|
END; |
Операторские скобки
BEGIN
/* Операторские скобки должны содержать хотя бы один оператор. Требуются для конструкций поливариантных ветвлений, условных и цик- лических конструкций.
*/
END;
Оператор ветвления IF
Синтаксис:
IF условие_1 THEN
Операторы;
ELSIF условие_2 THEN
Операторы;
40
ELSIF условие_3 THEN
…
ELSE
Операторы; END IF
Пример ветвления:
SET SERVEROUTPUT ON DECLARE
nNUMBER; BEGIN
n:= DBMS_RANDOM.RANDOM; IF n<10 THEN
DBMS_OUTPUT.PUT_LINE('n=' || n || '; N<10'); ELSIF n=10 THEN
DBMS_OUTPUT.PUT_LINE('n=' || n || '; N=10'); ELSE
DBMS_OUTPUT.PUT_LINE('n=' || n || '; N>10'); END IF;
END;
Ветвление CASE
Синтаксис:
имя_переменной_метки:=
CASE
WHEN условие1 THEN
значение1
WHEN условие2 THEN
значение2
WHEN условие3 THEN
значение3
…
ELSE
значениеN END;
или
CASE
WHEN условие1 THEN
операторы; WHEN условие2 THEN
операторы; WHEN условие3 THEN
41
операторы;
…
ELSE
операторы; END CASE;
Пример ветвления:
SET SERVEROUTPUT ON DECLARE
nNUMBER; BEGIN
n:= DBMS_RANDOM.RANDOM; CASE
WHEN n<10 THEN DBMS_OUTPUT.PUT_LINE('n=' || n || '; N<10');
WHEN n=10 THEN DBMS_OUTPUT.PUT_LINE('n=' || n || '; N=10');
ELSE
DBMS_OUTPUT.PUT_LINE('n=' || n || '; N>10'); END CASE;
END;
Пример ветвления: |
|
SET SERVEROUTPUT ON |
|
DECLARE |
|
n NUMBER; |
|
ch char(15); |
|
BEGIN |
|
ch := |
|
CASE |
|
WHEN n<10 THEN |
'n=' || n || '; N<10' |
WHEN n=10 THEN |
'n=' || n || '; N=10' |
ELSE |
'n=' || n || '; N>10' |
END; DBMS_OUTPUT.PUT_LINE(ch); END;
Цикл WHILE
Синтаксис:
WHILE Условие LOOP
Операторы; END LOOP;
42
Цикл выполняется до тех пор, пока условие будет истинно. Для выхода из цикла по дополнительному условию можно использовать EXIT.
Пример цикла WHILE:
SET SERVEROUTPUT ON DECLARE a INT;
begin a := 1;
WHILE a <100 loop
IF (a>40) AND (a<50) THEN
exit; --выход и выполнение 1-й команды за циклом
ELSE
a := a+10;
DBMS_OUTPUT.PUT_LINE('в цикле а=' || a); END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('после цикла а=' || a); end;
Цикл LOOP
Синтаксис:
LOOP
EXIT WHEN условие_станет_истинно; Операторы;
END LOOP;
Цикл выполняется до тех пор, пока условие не приняло истинного зна- чения. Для выхода из цикла по дополнительному условию можно исполь- зовать EXIT.
Пример цикла LOOP:
SET SERVEROUTPUT ON DECLARE a INT;
begin a := 1; LOOP
EXIT WHEN a >100;
IF (a>40) AND (a<50) THEN
exit; --выход и выполнение 1-й команды за циклом
ELSE
a := a+10;
DBMS_OUTPUT.PUT_LINE('в цикле а=' || a); END IF;
43
END LOOP;
DBMS_OUTPUT.PUT_LINE('после цикла а=' || a); end;
Цикл FOR
Цикл, управляемым оператором FOR, используется в том случае, когда точно известно, сколько раз нужно выполнять итерацию цикла.
Синтаксис:
FOR переменная_счетчик IN старт_значение .. конеч_значение LOOP Операторы;
END LOOP;
Цикл выполняется до тех пор, пока переменная не приняла поочередно с шагом по умолчанию 1 от стартового значения до конечного значения. Для выхода из цикла по дополнительному условию можно использовать
EXIT.
Пример цикла FOR:
SET SERVEROUTPUT ON DECLARE
end_ INT:=20; begin_ INT:=1;
Factorial NUMBER:=1; begin
FOR I IN begin_ .. end_ LOOP Factorial:= Factorial*I;
END LOOP; DBMS_OUTPUT.PUT_LINE(factorial); end;
Передача данных из запроса в переменную
Для этого необходимо предварительно объявить переменную, в кото- рую поместим результат запроса, далее в операторе SELECT используем конструкцию INTO с указанием имени объявленной переменной:
SET SERVEROUTPUT ON DECLARE
Itogo INT; begin
SELECT COUNT(Code_author) INTO Itogo FROM ADMIN_BOOKS.Authors; DBMS_OUTPUT.PUT_LINE(Itogo);
end;
44