PL / SQL神秘箭头操作符

时间:2013-12-06 10:52:22

标签: sql oracle operators

什么是运营商“=>”我们经常可以在UTL_TCP用例中看到什么?

http://www.oracle-base.com/articles/misc/ftp-from-plsql.php

一样
  l_conn := ftp.login('ftp.company.com', '21', 'ftpuser', 'ftppassword');
  ftp.ascii(p_conn => l_conn);
  ftp.get(p_conn      => l_conn,
          p_from_file => '/u01/app/oracle/test.txt',
          p_to_dir    => 'MY_DOCS',
          p_to_file   => 'test_get.txt');
  ftp.logout(l_conn);

我不明白“p_conn => l_conn”的紫癜是什么,因为我们从不在任何地方使用p_conn。 即使关闭连接也是使用ftp.logout(l_conn)完成的,而不是使用p_conn。 在此运算符“=>”之前使用的所有变量甚至没有在任何地方定义。

也许它是特定于UTL_TCP包的运算符,因为我从未在任何其他地方看到过它,并且无法在任何PL / SQL文档,Oracle或其他方面找到它。

2 个答案:

答案 0 :(得分:9)

这是一种将参数传递给名为notated的PL / SQL子程序的方法 有关更多信息,请参阅Oracle官方文档:
http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/08_subs.htm#sthref1013

当您不知道某个程序所期望的参数数量或预期的顺序时,通常会使用它。因此,您只需将要传递的每个参数命名为相应的值。

摘自文件:

  

位置符号。您可以按照与过程中声明的顺序相同的顺序指定相同的参数。

     

这种表示法是紧凑的,但如果您以错误的顺序指定参数(尤其是文字),则很难检测到该错误。如果过程的参数列表发生更改,则必须更改代码。

     

命名符号。您可以指定每个参数的名称及其值。箭头(=>)用作关联运算符。参数的顺序并不重要。

     

这种表示法更加冗长,但使您的代码更易于阅读和维护。如果过程的参数列表发生更改,有时可以避免更改代码,例如,如果重新排序参数或添加了新的可选参数。命名符号是一种很好的做法,可用于调用其他人的API的任何代码,或定义供其他人使用的API。

     

混合记谱法。您可以使用位置表示法指定第一个参数,然后切换到最后一个参数的命名表示法。

     

您可以使用此表示法来调用具有一些必需参数的过程,然后是一些可选参数。

答案 1 :(得分:3)

摘自documentation

位置与子程序参数的命名表示法

调用子程序时,可以使用位置或命名表示法编写实际参数。也就是说,您可以按位置或名称指示实际参数和形式参数之间的关联。所以,鉴于声明

DECLARE
   acct INTEGER;
   amt  REAL;
   PROCEDURE credit_acct (acct_no INTEGER, amount REAL) IS ...

您可以用四种逻辑上等效的方式调用过程credit_acct:

BEGIN
   credit_acct(acct, amt);                  -- positional notation
   credit_acct(amount => amt, acct_no => acct);  -- named notation
   credit_acct(acct_no => acct, amount => amt);  -- named notation
   credit_acct(acct, amount => amt);             -- mixed notation