可以将 Oracle-Sql 中的函数用作 DML 吗?
Posted
技术标签:
【中文标题】可以将 Oracle-Sql 中的函数用作 DML 吗?【英文标题】:Can you use Function in Oracle-Sql as DML? 【发布时间】:2020-06-10 12:05:51 【问题描述】:所以我得到了执行以下任务的任务。
Create a simple program to demonstrate the use of stored functions for
a) Retrieving formatted information by giving the employee id.
b) Performing DML commands (Insert, Update and Delete)
c) Checking palindrome String
使用下表
SQL> desc Employee01;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(38)
ENAME NOT NULL VARCHAR2(20)
DEPTNO NOT NULL VARCHAR2(5)
JOB VARCHAR2(20)
HIREDDATE DATE
SALARY NUMBER(38)
我已经完成了前两个,但回文一个我不知道如何开始。帮助将不胜感激。
编辑:在 DML 中获得帮助 回文码
CREATE OR REPLACE FUNCTION FPal(
str VARCHAR2)
RETURN VARCHAR2
IS
l VARCHAR2;
t VARCHAR2;
res VARCHAR2 (130);
BEGIN
FOR i IN REVERSE 1..Length(s) LOOP
l := Substr(str, i, 1);
t := t
||''
||l;
END LOOP;
IF t = str THEN
dbms_output.Put_line(t
||''
||' is palindrome');
ELSE
dbms_output.Put_line(t
||''
||' is not palindrome');
END IF;
RETURN (res);
END FPal;
/
【问题讨论】:
mysql sql server 甲骨文。 mysql和sql server我已经下架了,以后请只标记问题涉及的产品 好吧,你卡在哪里了?您尝试了哪些方法,为什么没有奏效? 实际上在 DML 中得到了帮助,现在我被困在 Palindrome 中 同样的问题适用:您尝试过什么? 仅解决您的主题行 - “您”。是的,你可以,但这不是正确使用函数。这可能是你的家庭作业,但请,请,请不要认为这意味着在函数中执行 dml 是个好主意。 【参考方案1】:这是一个可能的固定函数:
SQL> set serveroutput on
SQL> CREATE OR REPLACE FUNCTION FPal(
2 str VARCHAR2)
3 RETURN VARCHAR2
4 IS
5 l CHAR;
6 t VARCHAR2(128);
7 BEGIN
8 FOR i IN REVERSE 1..Length(str) LOOP
9 l := Substr(str, i, 1);
10 t := t || l;
11 END LOOP;
12
13 IF t = str THEN
14 dbms_output.Put_line(t ||' is palindrome');
15 return 'TRUE';
16 ELSE
17 dbms_output.Put_line(t ||' is not palindrome');
18 return 'FALSE';
19 END IF;
20 END FPal;
21 /
Function created.
SQL> show errors
No errors.
测试:
SQL> select fpal('ABBA') from dual;
FPAL('ABBA')
--------------------------------------------------------------------------------
TRUE
ABBA is palindrome
SQL> select fpal('BABA') from dual;
FPAL('BABA')
--------------------------------------------------------------------------------
FALSE
ABAB is not palindrome
SQL>
【讨论】:
【参考方案2】:另一种方法:将输入字符串拆分为行并将它们合并向后,向后。比较这两个值并做出决定。
SQL> create or replace function f_pal (par_val in varchar2) return varchar2 is
2 l_val varchar2(200) := replace(par_val, ' ', '');
3 l_rev varchar2(200);
4 begin
5 select listagg(regexp_substr(l_val, '[^.]', 1, level), '')
6 within group (order by level desc)
7 into l_rev
8 from dual
9 connect by level <= length(l_val);
10
11 return 'palindrome: ' || case when l_rev = l_val then 'YES'
12 else 'NO'
13 end;
14 end;
15 /
Function created.
测试:
SQL> with
2 test (col) as
3 (select 'little' from dual union all
4 select 'radar' from dual union all
5 select '12321' from dual union all
6 select 'ana voli milovana' from dual
7 )
8 select col, f_pal(col) result
9 from test;
COL RESULT
----------------- ------------------------------
little palindrome: NO
radar palindrome: YES
12321 palindrome: YES
ana voli milovana palindrome: YES
SQL>
【讨论】:
以上是关于可以将 Oracle-Sql 中的函数用作 DML 吗?的主要内容,如果未能解决你的问题,请参考以下文章