将多个参数存储到一个变量Oracle 11G中

时间:2015-05-12 13:57:25

标签: oracle function variables oracle11g

我正在完成一项任务。我想要做的是将两个参数值存储到一个变量值中。我的代码目前是:

create or replace function generateISIN(
  countryCode Country.Code%type,
  universityCode University.Code%type,
  studentNumber varchar2)
return varchar2
as
  v_numbers varchar2(9);
  newStudentNumber varchar2(50) := '';
begin
  select co.code, un.code
  into newStudentNumber
  from country co, university un
  where v_numbers = studentNumber;
  dbms_output.put_line('implementeer deze functie verder...');
  return newStudentNumber;
end;
/

此程序/代码的含义是将国家代码(US,NL,AUS等)和大学代码(RUS,TUE,TIU等)转换为一个变量。所以最后我会得到一个ISIN

  

国际学生识别号码

例如:NL 1234 5678 944 TUE

知道如何将国家/地区代码和大学代码与数字相结合吗?

2 个答案:

答案 0 :(得分:2)

假设您的变量足以容纳结果,您可以使用字符串连接运算符||简单地连接列:

select co.code || un.code
  into newStudentNumber
  from country co, university un
  where v_numbers = studentNumber;

答案 1 :(得分:1)

您可以使用连接运算符|| CONCAT 函数连接列值。

例如,

select co.code ||' '|| un.code
  into newStudentNumber
  from country co, university un
  where v_numbers = studentNumber;

我在中间使用了一个空格,只是为了确保输出是清晰的,每个代码都用空格分隔。

更新您需要更正查询:

select co.code, un.code
  into newStudentNumber
  from country co, university un
  where v_numbers = studentNumber;
  • 您有一个笛卡尔连接,因为过滤谓词没有真正的列
  • 在运算符的两侧你使用了局部变量,没有任何意义。通常,您将基于业务逻辑在IF-ELSE构造中进行比较。
  

dbms_output.put_line('implementeer deze functie verder ...');

DBMS_OUTPUT 在测试代码时提供了很好的帮助,但请确保不要在生产环境上执行此操作。

另外,请记住,如果您可以在SQL中执行某些操作,那么除非有业务需要,否则不应使用PL / SQL。您的整个代码可以替换为单个SQL语句。