Oracle PL/SQL将多个varchar2选择为一个varchar2
我是pl sql的初学者,我正在尝试编写一个函数的代码,以便在coursename中读取并显示讲师姓名、coursename以及与coursename匹配的标题 然而,我无法得到一个像样的输出,不管我尝试过的不同方法,我得到了很多不同的错误,下面是能够编译但没有给出任何结果的代码 有谁能帮我完成这个功能并告诉我哪里出错了吗Oracle PL/SQL将多个varchar2选择为一个varchar2,oracle,plsql,varchar2,Oracle,Plsql,Varchar2,我是pl sql的初学者,我正在尝试编写一个函数的代码,以便在coursename中读取并显示讲师姓名、coursename以及与coursename匹配的标题 然而,我无法得到一个像样的输出,不管我尝试过的不同方法,我得到了很多不同的错误,下面是能够编译但没有给出任何结果的代码 有谁能帮我完成这个功能并告诉我哪里出错了吗 Set echo on set serveroutput on CREATE OR REPLACE FUNCTION Courses(coursename IN VARC
Set echo on
set serveroutput on
CREATE OR REPLACE FUNCTION Courses(coursename IN VARCHAR2) RETURN VARCHAR2
IS
results VARCHAR2(100);
l VARCHAR2(30);
c VARCHAR2(30);
t VARCHAR2(30);
BEGIN
FOR course IN(select lecturerName, coursename, title into l,c,t from course where Coursename = coursename)
LOOP
results := results || l || c || t;
END LOOP;
RETURN results;
END Courses;
/
SELECT Courses('SQL') from dual;
Courses('SQL')
一定是这个
FOR course IN (select lecturerName, coursename, title from course where Coursename = coursename)
LOOP
results := results || course.lecturerName || course.coursename || course.title;
END LOOP;
或者更简单
select lecturerName||coursename||title||
from course
where Coursename = 'SQL';
如果希望函数根据课程名称返回所有匹配项,则结果将类似于表。我猜你不想返回1场比赛,你的桌子上可能还有更多。此外,您可能不希望将所有匹配项视为一行,即所有匹配项合并在一起 为此,您需要一个管道函数,该函数返回一个数据集,由自定义类型表示 首先,创建类型:
CREATE OR REPLACE TYPE COURSEINFO as Table of VARCHAR2(512); --size can vary based on your needs
该功能变为:
CREATE OR REPLACE FUNCTION COURSES (
p_coursename IN VARCHAR2)
RETURN COURSEINFO
PIPELINED
IS
text VARCHAR2 (512);
BEGIN
FOR course IN (SELECT lecturerName, coursename, title
FROM course
WHERE Coursename = p_coursename)
LOOP
text := course.lecturerName || ', ' || course.coursename || ', ' || course.title;
PIPE ROW(text);
END LOOP;
RETURN;
END COURSES;
对于输入表:
course1 | title2 | lecturer3
course1 | title1 | lecturer1
course2 | title2 | lecturer2
生成输出:
lecturer1, course1, title1
lecturer3, course1, title2
讲师1,课程1,标题1
讲师3,课程1,标题2
从PL/SQL调用SQL时,您混合了两种不同的方法:要么将
用于,要么将用于c IN(SQL)循环…
,而不是两者都使用。您的代码有一个主要错误,其中Coursename=Coursename
对于任何记录都是真的,即,无论您的输入是什么,都将始终选择完整的表。对列和变量使用不同的名称。
lecturer1, course1, title1
lecturer3, course1, title2