无法在 varchar2() 中保存逗号分隔的数字字符串

     2023-03-27     253

关键词:

【中文标题】无法在 varchar2() 中保存逗号分隔的数字字符串【英文标题】:Can't save comma separated number string in varchar2() 【发布时间】:2019-04-01 10:06:11 【问题描述】:

我有一个我想通过单击添加的项目列表,为此我创建了一个表,其中包含一个类型为 varchar2(4000) 的列,在此列中我想列出引用其他表,因此我可以将此列的值粘贴为参数。前任。 select t.* from table_name t where t.point_id in (varchar2 string of comma separated point_ids)。

我遇到的问题是,当我在 varchar2 字段中输入超过 1 个 id 时,我得到 ORA-06502: PL/SQL: numeric or value error: character to number conversion error

如何避免此错误?我的字段是 varchar2,而不是数字,我不希望它被转换。我需要保存我正在解析的值。前任。 (11, 12)

我的桌子图片:

编辑:注意 - 我的选择工作正常,我遇到的问题是保存信息。

我的插入:

procedure lab_water_pointsgroup (v_group_id lab_water_pointsgroups.group_name%type,
                          v_group_name lab_water_pointsgroups.group_code%type,
                          v_group_code lab_water_pointsgroups.lab_points_ids%type,
                          v_lab_points_ids lab_water_pointsgroups.group_id%type) as
begin
update lab_water_pointsgroups
   set group_name = v_group_name,
       group_code = v_group_code,
       lab_points_ids = v_lab_points_ids
 where  group_id = v_group_id;
if ( SQL%RowCount = 0 ) then
insert into lab_water_pointsgroups
  (group_id, group_name, group_code, lab_points_ids)
values
  (v_group_id, v_group_name, v_group_code, v_lab_points_ids);
end if;
end;

【问题讨论】:

该错误消息可能是件好事,因为将 CSV 数据存储在单个 SQL 列中通常好。为什么要这样存储 CSV? 确定该列的数据类型是 VARCHAR2 吗?请发布表的描述(在 SQL*Plus 中运行 DESC table_name 并将结果复制到此处 - 编辑问题,不要将其作为评论发布)。 我在尝试运行 desc 时收到无效的 SQL 语句。编辑:更新了我的桌子图片。 您能否在问题中发布插入语句的代码。 您不应该存储逗号分隔的值开始。规范化你的数据模型,你就没有这个问题 【参考方案1】:

由于您没有给出示例,因此不确定我在这里可以为您提供什么帮助。看看下面的演示,也许xmltable 的结构可以解决你的问题。 HTH 韩币

create table testtab (id number);
insert into  testtab values (1);

select * from testtab where id in ('1');   -- works
select * from testtab where id in (1);     -- works
select * from testtab where id in (1,2);   -- works
select * from testtab where id in ('1,2'); -- ORA-01722: invalid number
select * from testtab where id in (select to_number(xt.column_value) from xmltable('1,2') xt); -- works

【讨论】:

当我通过选择更新手动添加 id 时,我没有任何问题。但是当使用程序更新值时,我得到了错误。 "varchar2 string of comma separated point_ids" 是一个字符串。所以你的查询实际上是where 11 in ('11,12')。因为您将数字与字符串进行比较,所以 Oracle 尝试将 '11,12' 转换为数字;它显然不是一个有效的数字,所以 Oracle 抛出 ORA-1722。您需要将字符串转换为一系列数字 ID。这就是 Peter 的 xmltable() 实现将解决您的问题的原因。 我的问题不是读取 id,而是更新 lab_point_ids 值。【参考方案2】:

以下是您为过程定义参数的方式:

v_group_id        lab_water_pointsgroups.group_name%type,
v_group_name      lab_water_pointsgroups.group_code%type,
v_group_code      lab_water_pointsgroups.lab_points_ids%type,
v_lab_points_ids  lab_water_pointsgroups.group_id%type

我怀疑你的类型有误,因为idname 类型,namecode 类型等等。所以应该是:

v_group_id        lab_water_pointsgroups.group_id%type,
v_group_name      lab_water_pointsgroups.group_name%type, 
v_group_code      lab_water_pointsgroups.group_code%type,
v_lab_points_ids  lab_water_pointsgroups.lab_points_ids%type

我建议使用merge 而不是这个update / insert,但这不是你要求的:)

【讨论】:

【参考方案3】:

您的错误在于您没有区分包含逗号分隔数字的变量和“in”运算符中的实际枚举。在您的代码分析和准备执行之后,您的语句将类似于.. id in ('1,2,3') 而不是..id in (1,2,3),您注意到不同了吗?因此,您需要将逗号分隔的值转换为数组,或者在这种情况下转换为集合。你的代码应该是这样的:

select t.*
  from table_name t
 where t.point_id in
       (select regexp_substr(YOUR_VARCHAR2_COLUMN_VALUE, '[^,]+', 1, level)
          from dual
        connect by regexp_substr(YOUR_VARCHAR2_COLUMN_VALUE, '[^,]+', 1, level) is not null)

【讨论】:

如何在r中添加或减去逗号分隔的数字?

】如何在r中添加或减去逗号分隔的数字?【英文标题】:howtoaddorsubtractcommaseparatednumbersinr?【发布时间】:2017-08-2816:47:19【问题描述】:如何对逗号分隔的数字执行计算。例如result<-10,000+5,000+60,000给出错误错误:“结果【问题... 查看详情

在单元格中搜索逗号分隔的数字

】在单元格中搜索逗号分隔的数字【英文标题】:Searchingcomma-separatednumberswithinacell【发布时间】:2014-09-0904:46:33【问题描述】:我有一列有很多逗号分隔的数字,例如:100633,101123,12100633,1000如何搜索特定单元格是否包含数字100633... 查看详情

有啥方法可以在CSV中输入用逗号分隔的数字?

】有啥方法可以在CSV中输入用逗号分隔的数字?【英文标题】:AnywaytoinputnumbersseparatedbycommainCSV?有什么方法可以在CSV中输入用逗号分隔的数字?【发布时间】:2020-01-0808:36:33【问题描述】:我需要上传一个包含逗号分隔数字的CSV... 查看详情

Excel 函数或 VBA 代码在逗号分隔的字符串中搜索数字

】Excel函数或VBA代码在逗号分隔的字符串中搜索数字【英文标题】:ExcelFunctionorVBAcodetosearchfornumberincomma-separatedstring【发布时间】:2017-07-1102:37:51【问题描述】:在包含用户输入的逗号分隔数字的列中:1,2,3,4,511,12,14,321,32,45,92,101,... 查看详情

如何在 XAML 中使用 StringFormat 显示逗号​​分隔的数字?

】如何在XAML中使用StringFormat显示逗号​​分隔的数字?【英文标题】:HowtoshowacommaseparatednumberwithStringFormatinXAML?【发布时间】:2014-04-1307:26:53【问题描述】:我的代码目前显示如下:43521reviews,我希望它是这样的:43,521reviews。... 查看详情

在逗号分隔的字母数字正则表达式中添加空格

】在逗号分隔的字母数字正则表达式中添加空格【英文标题】:Addspaceincommaseparatedalphanumericregex【发布时间】:2015-10-0417:56:38【问题描述】:我想要实现的是我想在JSF输入字段上应用正则表达式,其中允许5位字母数字和空格,如... 查看详情

如何将在一行中输入的以逗号分隔的数字放入Java中的数组中

】如何将在一行中输入的以逗号分隔的数字放入Java中的数组中【英文标题】:howtogetnumbersseparatedbycommaenteredinalineintoanarrayinJava【发布时间】:2012-05-1216:11:29【问题描述】:如何将用户eq:1、3、400、444等在一行中输入的值放入数组... 查看详情

如何检查存储在varchar列中的逗号分隔列表中是否包含数字?(代码片段)

...设计此表以将这些值从逗号分隔为单独的行。但是,如果无法做到这一点,那么您将继续执行字符串比较:DECLARE@idINT=3DECLARE@stringIdVARCHAR(50)=CAST(@idASVARCHAR(50))SELECT*FROMMyTableWHEREcategoryIds=@stringId--Whenthereisonly1idinthetableORcategoryIdsLIKE@st... 查看详情

无法在 codeigniter 视图中显示逗号分隔值

】无法在codeigniter视图中显示逗号分隔值【英文标题】:Notabletogetshowcomaseparatedvaluesincodeigniterview【发布时间】:2016-07-1222:18:17【问题描述】:我有这个数组我没有得到area_tutor因为它有逗号的值Array([0]=>stdClassObject([tuitor_id]=>28... 查看详情

在雪花结果集中用逗号分隔输出数字

】在雪花结果集中用逗号分隔输出数字【英文标题】:Outputnumberswithcommaseparationinsnowflakeresultset【发布时间】:2020-09-1702:47:42【问题描述】:我正在Snowflake中处理SQL查询。我能够在浏览器(chrome)或SQLWorkbenchJ中工作。我对两者都很... 查看详情

不要在angularjs的textarea中输入超过20个逗号分隔或换行符分隔的序列号和字母数字

】不要在angularjs的textarea中输入超过20个逗号分隔或换行符分隔的序列号和字母数字【英文标题】:Don\'tInputmorethan20commaseparatedornew-lineseparatedserialnoandalpha-numericintextareainangularjs【发布时间】:2020-10-2707:42:23【问题描述】:这是我... 查看详情

无法在 Pandas 中导入逗号分隔的引用文件

】无法在Pandas中导入逗号分隔的引用文件【英文标题】:CannotimportcommadelimitedquotedfileinPandas【发布时间】:2020-01-1415:04:10【问题描述】:我正在尝试将此数据导入Pandas。它在Libreoffice中正确导入,带有标题和2行。但是,在Pandas中... 查看详情

如何在数字字符串中插入逗号以分隔零? [复制]

】如何在数字字符串中插入逗号以分隔零?[复制]【英文标题】:HowcanIinsertcommasinnumberstringstoseparatethezeros?[duplicate]【发布时间】:2016-02-0813:15:09【问题描述】:publicclasstestpublicstaticvoidmain(String[]args)Stringabra="100000";abra=abra.replace(abr... 查看详情

excel表格导入到iphone里长串数字无法显示如:手机号码要怎么办

RT。。只要是长串数字都会显示1.57E+10之类的  在excel中将数字修改成成文本格式,以以逗号分隔即可。  excel表格中的数字导入iPhone的具体操作方法如下:  1、打开之前导出到桌面上的文件。  2、可以看到类似excel表格... 查看详情

将字符串中的逗号分隔数字转换为数字向量[重复]

】将字符串中的逗号分隔数字转换为数字向量[重复]【英文标题】:Convertcommaseparatednumbersinacharacterstringtonumericvector[duplicate]【发布时间】:2017-06-1312:05:50【问题描述】:我正在努力将字符串中的逗号分隔数字转换为数字向量。(... 查看详情

打开用空格分隔符保存为逗号分隔符的CSV文件[关闭]

】打开用空格分隔符保存为逗号分隔符的CSV文件[关闭]【英文标题】:openingCSVfilewhichissavedwithspaceseperatorsascommaseperator[closed]【发布时间】:2021-04-0106:08:53【问题描述】:我刚刚在LibreOffice中打开了一个空格分隔的CSV文件,做了一... 查看详情

如何在 JavaScript 中使用逗号分隔符从字符串中生成数字(“23,21”---> 23,21)

】如何在JavaScript中使用逗号分隔符从字符串中生成数字(“23,21”--->23,21)【英文标题】:HowtomakeanumberfromstringwithcommaseparatorsinJavaScript("23,21"--->23,21)【发布时间】:2021-09-2209:57:45【问题描述】:有谁知道如何在JS中从... 查看详情

在奏鸣曲中保存包含逗号的数字时“此值无效”

】在奏鸣曲中保存包含逗号的数字时“此值无效”【英文标题】:"Thisvalueisnotvalid"whensavingacomma-includingnumberinSonata【发布时间】:2019-11-1406:25:40【问题描述】:我正在使用Sonata和Symfony3开发一个CMS。我使用JavaScriptAutoNumeric... 查看详情