oracle 循环中申明索引,表类型变量在oracle中用作循环索引(Table type variable use as loop index in oracle)...

表类型变量在oracle中用作循环索引(Table type variable use as loop index in oracle)

我创建了表类型

create or replace TYPE NUMBER_ARRAY

AS TABLE OF NUMBER;

我想循环选择PERIODS值

DECLARE PERIODS NUMBER_ARRAY;

BEGIN

FOR P IN(SELECT * FROM TABLE (PERIODS))

LOOP

SYS.DBMS_OUTPUT.PUT_LINE(p);

END LOOP;

END;

我收到这个错误

调用'PUT_LINE'时参数的数量或类型错误

I created table type

create or replace TYPE NUMBER_ARRAY

AS TABLE OF NUMBER;

I want to select PERIODS value one by one in loop

DECLARE PERIODS NUMBER_ARRAY;

BEGIN

FOR P IN(SELECT * FROM TABLE (PERIODS))

LOOP

SYS.DBMS_OUTPUT.PUT_LINE(p);

END LOOP;

END;

I get this error

wrong number or types of arguments in call to 'PUT_LINE'

原文:https://stackoverflow.com/questions/40975473

2020-03-22 16:03

满意答案

P是record数据类型。 put_line()过程需要字符串或任何其他可以隐式或显式转换为一个值的值。 查询简单嵌套表集合时,只返回一个名为COLUMN_VALUE 。 因此,在将所有内容放在一起后,您的代码应如下所示:

DECLARE PERIODS NUMBER_ARRAY;

BEGIN

FOR P IN (SELECT * FROM TABLE (PERIODS))

LOOP

/*

Since elements of the collection are of NUMBER data type

it's better to convert them to a character explicitly

rather than allow Oracle to do it implicitly, thus the use

of TO_CHAR() function.

*/

SYS.DBMS_OUTPUT.PUT_LINE(to_char(p.column_value));

END LOOP;

END;

P is of record data type. put_line() procedure expects character string or any other value that can be implicitly or explicitly converted to one. When you query a simple nested table collection, only one column will be returned, named COLUMN_VALUE. So, after putting it all together your code should look something like this:

DECLARE PERIODS NUMBER_ARRAY;

BEGIN

FOR P IN (SELECT * FROM TABLE (PERIODS))

LOOP

/*

Since elements of the collection are of NUMBER data type

it's better to convert them to a character explicitly

rather than allow Oracle to do it implicitly, thus the use

of TO_CHAR() function.

*/

SYS.DBMS_OUTPUT.PUT_LINE(to_char(p.column_value));

END LOOP;

END;

2016-12-05

相关问答

关联数组不一定是密集的。 在索引0处可能有一个元素,在索引-1处可能有一个元素,在索引1处可能有一个元素。或者,您可能在索引17,42和127处具有元素。您发布的代码意味着关联数组很密集,索引从1开始。 在apex_plugin_util.get_data的特定情况下,集合应该是密集的,并且应该从1开始。如果循环实际上没有执行除发布内容之外的其他任何操作,则可以通过获取l_RowSet(1)的最后一个元素来替换它,即 l_a_variable := l_RowSet(1)(l_RowSet(1)....

我认为无论如何都不会在循环中做到这一点。 您可以使用案例表达式来执行此操作: UPDATE FD_TABLE FD_CLI_RID = TO_NUMBER(CASE

WHEN KEYWORD1 = 'CLI_RID' THEN KEYWORD1_VAL

WHEN KEYWORD2 = 'CLI_RID' THEN KEYWORD2_VAL

WHEN KEYWORD3 = 'CLI_RID' THEN KEYWORD3_VAL

...

END)

WHERE FD_...

您可以使用此查询来检查类型的详细信息。 SQL> select * from all_type_attrs WHERE TYPE_NAME='TASK_OBJ';

OWNER TYPE_NAME ATTR_NAME ATTR_TY ATTR_TYPE_OWNER ATTR_TYPE_NAME ...

一个普通的b-tree索引是合适的,但如果这是一个日志值增加的日志表,那么就要注意索引块争用。 如果你有很多会话在索引中插入新值并且这些值属于同一个块,那么你可能会遇到性能问题。 对此的一种缓解措施是反向密钥索引,但这使得您提供的类型的查询更加昂贵,因为反向密钥索引无法支持范围扫描。 您将获得完整索引扫描或快速全索引扫描。 这也会使索引更大,因为索引块分割将是50/50,而不是Oracle在检测到索引值中向右增长模式时使用的90/10。 A regular b-tree index would b...

首先,你不能使用pipline联合阵列。 检查这个更多关于集合类型的信息。 http://www.developer.com/db/article.php/10920_3379271_2/Oracle-Programming-with-PLSQL-Collections.htm 其次,您需要在pl / sql中选择或使用光标。 我写了一些演示代码,以便您可以检查一下它是如何工作的。 我不太清楚你真正想做什么,但至少这是编译好的,这很好。 create or replace type t_rec_e...

要将大量数据从文本文件加载到Oracle, SQL * Loader实用程序是一个不错的选择。 该软件包含在Oracle客户端安装中(您可以在此处下载)。 建立 假设您将数据导入具有该结构的目标表( target_table ) CREATE TABLE target_table (

from_party VARCHAR2(15) NOT NULL,

to_party VARCHAR2(15) NOT NULL,

created DATE,

upd...

对不起,这不完整,但要跟进@Lukas,这是我到目前为止所做的: 首先,我没有尝试创建任何数据/任何类型,而是尝试使用从游标中提取的XML ...很奇怪,但它的通用: CREATE OR REPLACE procedure printCur(in_cursor IN sys_refcursor) IS

begin

FOR c IN (SELECT ROWNUM rn,

t2.COLUMN_VALUE.getrootelement () NAME,

...

默认循环索引类型与array.length: size_t相同。 它在32位上为uint,在64位上为ulong。 The default loop index type is the same as array.length: size_t. It is aliased to uint on 32 bit, and to ulong on 64 bit.

P是record数据类型。 put_line()过程需要字符串或任何其他可以隐式或显式转换为一个值的值。 查询简单嵌套表集合时,只返回一个名为COLUMN_VALUE 。 因此,在将所有内容放在一起后,您的代码应如下所示: DECLARE PERIODS NUMBER_ARRAY;

BEGIN

FOR P IN (SELECT * FROM TABLE (PERIODS))

LOOP

/*

Since elements of the collection ar...

可能会有一些因素导致您的结果: 有不同模式的表具有相同的名称(您错过了两个表之间所有者的连接) 同一个表上可能有多个约束。 除此之外,您还通过执行嵌套循环设法重新创建嵌套循环连接。 一般来说,这是一个坏主意 - 如果Hash Join更高效,该怎么办? 通过使用嵌套游标for循环,您将有效地阻止Oracle。 至少,你可以在循环之前在一个sql语句中加入你的两个游标。 但是,看起来您正在尝试生成变量列表而无需键入它们。 您可以在单个SQL语句中执行此操作 - 不需要PL / SQL,如下所示: S...

相关文章

insert into TBL_Message(id,message,author,postTime)

...

在使用jsp生成web图片时遇到这个问题,这是源代码中的一条语句,源代码可以执行,可是一将源码放入ec

...

从oracle存储过程返回记录集 转自:http://www.cnblogs.com/SunJav

...

从oracle存储过程返回记录集 转自:http://www.cnblogs.com/jinan

...

关于oracle的lob类型。在网上查了一下,大多是怎么用lob。 我想问,在什么情况下适合用lob

...

这是我在lucene in action 中看到的,本来想翻译一下,但是翻译成汉语就没有原来的味道了。

...

在 老熊 的Blog上看到他们写的有关ORA-04031的文章,转到blog。 老熊的Blog: ht

...

在 老熊 的Blog上看到他们写的有关ORA-04031的文章,转到blog。 老熊的Blog: ht

...

在 老熊 的Blog上看到他们写的有关ORA-04031的文章,转到blog。 老熊的Blog: ht

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值