什么是运营商“=>”我们经常可以在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或其他方面找到它。
答案 0 :(得分:9)
这是一种将参数传递给名为notated的PL / SQL子程序的方法
有关更多信息,请参阅Oracle官方文档:
http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/08_subs.htm#sthref1013
当您不知道某个程序所期望的参数数量或预期的顺序时,通常会使用它。因此,您只需将要传递的每个参数命名为相应的值。
摘自文件:
位置符号。您可以按照与过程中声明的顺序相同的顺序指定相同的参数。
这种表示法是紧凑的,但如果您以错误的顺序指定参数(尤其是文字),则很难检测到该错误。如果过程的参数列表发生更改,则必须更改代码。
命名符号。您可以指定每个参数的名称及其值。箭头(=>)用作关联运算符。参数的顺序并不重要。
这种表示法更加冗长,但使您的代码更易于阅读和维护。如果过程的参数列表发生更改,有时可以避免更改代码,例如,如果重新排序参数或添加了新的可选参数。命名符号是一种很好的做法,可用于调用其他人的API的任何代码,或定义供其他人使用的API。
混合记谱法。您可以使用位置表示法指定第一个参数,然后切换到最后一个参数的命名表示法。
您可以使用此表示法来调用具有一些必需参数的过程,然后是一些可选参数。
答案 1 :(得分:3)
位置与子程序参数的命名表示法
调用子程序时,可以使用位置或命名表示法编写实际参数。也就是说,您可以按位置或名称指示实际参数和形式参数之间的关联。所以,鉴于声明
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