`
aa8945163
  • 浏览: 276069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

触发器ORA-01858: 在要求输入数字处找到非数字字符

CMS 
阅读更多
根据自己的错误和解决,总的归类出来啦:
1.我们在插入的类型不匹配,比如数据库里面是数字,我们用日期类型去填充.
2.我们忘数据库中插入的时候,为空的时候不要默认成null,这样数据库就不会出现这个问题啦.
3我花啦几个小时弄出来的问题
create or replace trigger CMS_TRG_MAT_STOR_PRICE
  after insert or update
  on cms_bdb_mat_erp
  for each row
declare
  v_mat_sid    cms_bdb_mat_erp.sid%type;
  v_mat_createdt   cms_bdb_mat_erp.created_dt%type;
  v_mat_createby   cms_bdb_mat_erp.created_by%type;
  v_mat_version   cms_bdb_mat_erp.version%type;
  v_mat_updatedt  cms_bdb_mat_erp.updated_dt%type;
  v_mat_updateby  cms_bdb_mat_erp.updated_by%type;
  v_mat_code    cms_bdb_mat_erp.mat_code%type;
  v_mat_desc    cms_bdb_mat_erp.mat_desc%type;
  v_mat_price   cms_bdb_mat_erp.unit_price%type;
  v_mat_count  cms_bdb_mat_erp.real_num%type;
  v_mat_cost_center_code cms_bdb_mat_erp.cost_center_code%type;
  v_mat_cost_center_desc cms_bdb_mat_erp.cost_center_desc%type;
  v_mat_code1    cms_bdb_mat_erp.mat_code%type;
  v_mat_price1   cms_bdb_mat_erp.UNIT_PRICE%type;
  v_mat_count1   cms_bdb_mat_erp.REAL_NUM%type;
begin
  if inserting then
   v_mat_sid       :=:new.sid;
   v_mat_createdt  :=:new.CREATED_DT;
   v_mat_createby  :=:new.CREATED_BY;
   v_mat_version   :=:new.VERSION;
   v_mat_updatedt  :=:new.UPDATED_DT;
   v_mat_updateby  :=:new.UPDATED_BY;
   v_mat_code      :=:new.mat_code;
   v_mat_desc      :=:new.mat_desc;
   v_mat_price     :=:new.unit_price;
   v_mat_count     :=:new.REAL_NUM;
   v_mat_cost_center_code :=:new.cost_center_code;
   v_mat_cost_center_desc :=:new.cost_center_desc;
  merge into CMS_BDB_MAT_STOR t1
    using (select v_mat_sid SID,v_mat_createdt CREATED_DT,v_mat_createby CREATED_BY,v_mat_version VERSION,v_mat_updatedt UPDATED_DT, v_mat_updateby UPDATED_BY, v_mat_code MAT_CODE,v_mat_desc MAT_DESC,v_mat_count STOR_COUNT,v_mat_price PRICE,v_mat_cost_center_code COST_CENTER_CODE,v_mat_cost_center_desc COST_CENTER_DESC from dual) t2
  on (t1.mat_code = t2.mat_code)
  when matched then
       update set STOR_COUNT=t1.STOR_COUNT+v_mat_count,PRICE=(v_mat_price*v_mat_count+t1.STOR_COUNT*t1.PRICE)/(v_mat_count+t1.STOR_COUNT)
  when not matched then
       insert  values(t2.sid,t2.created_dt,t2.created_by,t2.version,t2.updated_dt,t2.updated_by,t2.mat_code,t2.mat_desc,t2.stor_count,t2.price,t2.cost_center_code,t2.cost_center_desc);
  elsif updating then
        v_mat_code1      :=:old.mat_code;
        v_mat_price1     :=:old.UNIT_PRICE;
        v_mat_count1     :=:old.REAL_NUM;
        v_mat_sid       :=:new.sid;
        v_mat_createdt  :=:new.CREATED_DT;
        v_mat_createby  :=:new.CREATED_BY;
        v_mat_version   :=:new.VERSION;
        v_mat_updatedt  :=:new.UPDATED_DT;
        v_mat_updateby  :=:new.UPDATED_BY;
        v_mat_code      :=:new.mat_code;
        v_mat_desc      :=:new.mat_desc;
        v_mat_price     :=:new.UNIT_PRICE;
        v_mat_count     :=:new.REAL_NUM;
        v_mat_cost_center_code :=:new.cost_center_code;
        v_mat_cost_center_desc :=:new.cost_center_desc;
        update CMS_BDB_MAT_STOR t3 set STOR_COUNT=t3.STOR_COUNT-v_mat_count1,PRICE=(t3.STOR_COUNT*t3.PRICE-v_mat_price1*v_mat_count1)/(t3.STOR_COUNT-v_mat_count1) where t3.mat_code=v_mat_code1 and ((t3.STOR_COUNT-v_mat_count1)<>0);
        delete from CMS_BDB_MAT_STOR t3 where t3.mat_code=v_mat_code1 and ((t3.STOR_COUNT-v_mat_count1)=0);
        merge into CMS_BDB_MAT_STOR t1
          using (select v_mat_sid SID,v_mat_createdt CREATED_DT,v_mat_createby CREATED_BY,v_mat_version VERSION,v_mat_updatedt UPDATED_DT, v_mat_updateby UPDATED_BY, v_mat_code MAT_CODE,v_mat_desc MAT_DESC,v_mat_price PRICE,v_mat_count STOR_COUNT,v_mat_cost_center_code COST_CENTER_CODE,v_mat_cost_center_desc  COST_CENTER_DESC from dual) t2
        on (t1.mat_code = t2.mat_code)
        when matched then
             update set STOR_COUNT=t1.STOR_COUNT+v_mat_count,PRICE=(v_mat_price*v_mat_count+t1.STOR_COUNT*t1.PRICE)/(v_mat_count+t1.STOR_COUNT)
        when not matched then
       insert  values(t2.sid,t2.created_dt,t2.created_by,t2.version,t2.updated_dt,t2.updated_by,t2.mat_code,t2.mat_desc,t2.stor_count,t2.price,t2.cost_center_code,t2.cost_center_desc);
  end if;


end CMS_TRI_MAT_STOR_PRICE;
这个是因为原表数据项大于现在的数据项.
分享到:
评论

相关推荐

    ORACLE 11G导入到10G的命令

    4. **字符集兼容性**:如果源数据库和目标数据库的字符集不同,则需要在导入过程中进行相应的转换。 5. **依赖性处理**:对于复杂的数据库环境,需要特别注意处理依赖关系,比如存储过程、触发器等。 #### 总结 ...

    oracle脚本 常用的数据库sql及pl\sql语言

    5. 表达式索引:在创建索引时可以包含函数或表达式,加速复杂查询。 五、实用技巧 1. 使用EXPLAIN PLAN分析查询性能,找出可能的瓶颈。 2. 了解并使用绑定变量来避免SQL注入,提高安全性。 3. 定期维护索引,如重建...

    Oracle 数据库常见问题诊断方法

    - 如果是偶尔出现的问题,可以在服务端的协议配置文件 `PROTOCOL.ORA` 中增加一行配置来尝试解决:`TCP.NODELAY=YES`。 - 如果问题是由于客户端与服务端的字符集不一致引起的,则需要确保双方的字符集设置一致。 ...

    Oracle 错误码大全 ERROR CODE LIST

    5. **异常处理**:在PL/SQL编程中,可以使用`BEGIN...EXCEPTION...END`块来捕获和处理异常,以增强程序的健壮性。例如,使用`WHEN OTHERS THEN`子句可以捕获所有未明确定义的异常,并进行相应的处理。 6. **常见...

    oracle常用函数和常见错误积累

    4. **ORA-01722:无效数字**:当尝试将非数字字符转换为数字时,会出现这个错误。确保数据类型匹配,并正确处理输入数据。 除此之外,Oracle spool功能是一个实用工具,常用于批量输出SQL查询结果到文件。通过spool...

    oracle错误一览表

    7. **备份与恢复**:在进行数据库备份或恢复时,可能会遇到ORA-01113(文件需要检查)或ORA-01114(无法打开在线日志,已达到最大限制)等错误,这些问题需要对数据库的备份和恢复策略进行检查和调整。 8. **PL/SQL...

    Oracle常见错误诊断

    Oracle数据库在运行过程中可能会遇到各种错误,这些错误通常以特定的错误代码表示,如ORA-12571、ORA-01000、ORA-01545、ORA-0165x、ORA-01555、ORA-04031、ORA-04091、ORA-01242和ORA-01113。这些错误涉及数据库...

    oracle面试1000例

    - 热备份:在数据库运行时进行的备份,使用RMAN(Recovery Manager)工具。 - 数据泵(EXPDP/IMPDP):用于导出导入数据,支持表、用户或整个数据库。 9. **性能优化**: - SQL优化:使用EXPLAIN PLAN分析执行...

    Oracle基于系统级触发器的审计功能

    - **DDL触发器**:在执行DDL(数据定义语言)命令如CREATE、ALTER、DROP等时触发。 - **最终用户登录/注销触发器**:当用户登录或退出数据库时触发。 - **系统错误触发器**:当系统遇到特定错误时触发。 通过这些...

    Java Functions, Stored Procedures, Triggers

    在Oracle数据库中,Java函数、存储过程和触发器允许开发者利用Java的强大功能来处理数据库操作。这种方式结合了SQL的高效数据处理与Java的面向对象编程能力,为开发复杂的企业级应用提供了灵活性。以下是对这些概念...

    ORACLR plsql引导学习

    - Oracle数据库还支持一些非预定义的异常,如`ORA-01403`(没有找到数据)等。 - **用户自定义的例外** - 用户可以根据需要定义自己的异常类型。 - 示例: ```plsql DECLARE e_custom_exception EXCEPTION; ...

    Oracle 11g 从入门到精通

    Oracle 11g是Oracle公司推出的数据库管理系统,它在企业级数据存储、管理和分析方面具有广泛的应用。本教程“Oracle 11g 从入门到精通”旨在帮助初学者掌握Oracle 11g的核心概念和技术,逐步提升为熟练的数据库管理...

    oracle ORA-00988 missing or invalid password 错误

    在使用Oracle数据库时,管理员和开发人员经常会遇到各种错误代码,其中之一就是"ORA-00988 missing or invalid password"。这个错误通常发生在尝试创建新用户或者修改用户密码时,特别是当密码以数字开头时。 在...

    ORACLE常用問題1000問

    - 在 `init.ora` 文件中设置: - `log_archive_start = true` - 重启数据库: - `RESTART DATABASE` #### 16. 如何获取正在使用的用户? - **查询命令:** - `SELECT username FROM v$session;` #### 17. ...

    OracleEBS开发汇总文档

    19. **ORA-01403未找到数据之解决方法** - **方法**: 检查查询条件或使用NULL值处理。 - **应用场景**: 异常处理。 20. **PL/SQL细粒度事务控制** - **解释**: 控制事务的粒度,提高并发性能。 - **应用场景**:...

    oracle详解

    在EXP/IMP过程中我们需要注意四个字符集的参数:导出端的客户端字符集,导出端数据库字符集,导入端的客户端字符集,导入端数据库字符集。 我们首先需要查看这四个字符集参数。 查看数据库的字符集的信息: SQL&gt; ...

    Ora9i SQL 参考手册

    5. **联接操作**:在Ora9i中,有多种类型的联接,如INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN,它们用于合并来自两个或更多表的数据。 6. **子查询**:子查询是嵌套在其他SQL语句中的查询,可以用于比较、筛选...

    oracle DBA两日速成手册1

    - 触发器和事件:理解触发器的工作原理,如何定义和管理触发器,以及如何利用触发器实现自动化的业务规则。 5. **其他进阶知识点** - 数据库安全:包括用户权限管理、角色、表和列级的安全性、审计和访问控制。 ...

Global site tag (gtag.js) - Google Analytics