PROC DELETE DATA=HOA.OBSER_QA;
RUN;
DATA HOA.OBSER_QA;
SET D.SUMMARY&YEARMTH._0762;
LOAD_DATE=TODAY();
FORMAT LOAD_DATE MMDDYY10.;
LENGTH LOAD_BY $20;
LOAD_BY="&_CLIENTUSERID.";
RUN;
PROC DELETE DATA=HOA.OBSER_QA;
RUN;
DATA HOA.OBSER_QA;
SET D.SUMMARY&YEARMTH._0762;
LOAD_DATE=TODAY();
FORMAT LOAD_DATE MMDDYY10.;
LENGTH LOAD_BY $20;
LOAD_BY="&_CLIENTUSERID.";
RUN;
Resource: http://support.sas.com/kb/40/132.html
The error stops the process due to the options in SAS and/or Oracle.
I cant use a pass through because the replacement dataset or lines are from a SAS dataset.
LOG:
1 The SAS System 11:54 Tuesday, July 31, 2018 1 ;*';*";*/;quit;run; 2 OPTIONS PAGENO=MIN; 3 %LET _CLIENTTASKLABEL='p05_Load'; 4 %LET _CLIENTPROCESSFLOWNAME='Process Flow'; 5 %LET _CLIENTPROJECTPATH='\\nashq1\SAS_HOA\ETL 5 ! Process\Dashboards\AdministrativeObservation\pgm\ELM_AdminObser_Official_MH.egp'; 6 %LET _CLIENTPROJECTPATHHOST='LHQ08907'; 7 %LET _CLIENTPROJECTNAME='ELM_AdminObser_Official_MH.egp'; 8 %LET _SASPROGRAMFILE='\\Nashq1\sas_hoa\ETL Process\Dashboards\AdministrativeObservation\pgm\p05_Load.sas'; 9 %LET _SASPROGRAMFILEHOST='LHQ08907'; 10 11 ODS _ALL_ CLOSE; 12 OPTIONS DEV=PNG; 13 FILENAME EGSR TEMP; 14 ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR 15 STYLE=HTMLBlue 16 STYLESHEET=(URL="file:///C:/Program%20Files%20(x86)/SASHome/x86/SASEnterpriseGuide/7.1/Styles/HTMLBlue.css") 17 NOGTITLE 18 NOGFOOTNOTE 19 GPATH=&sasworklocation 20 ENCODING=UTF8 21 options(rolap="on") 22 ; NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR 23 24 /* Start of Node: p06_Load.sas */ 25 options options sastrace=',,,db' sastraceloc=saslog; 26 27 LIBNAME HOA ORACLE USER="&USR.[HOA]" PW="&PWD" PATH="@HOAP" SCHEMA=HOA; NOTE: Libref HOA was successfully assigned as follows: Engine: ORACLE Physical Name: @HOAP 28 29 PROC DELETE DATA=HOA.ADMIN_QA; 30 RUN; 9090 1848685467 tkvercn1 0 DELETE ( ORACLE_1: Prepared: on connection 1 9091 1848685467 tkvercn1 0 DELETE ( SELECT * FROM HOA.ADMIN_QA 9092 1848685467 tkvercn1 0 DELETE ( 9093 1848685467 tkvercn1 0 DELETE ( 9094 1848685467 tkvercn1 0 DELETE ( ORACLE_2: Executed: on connection 1 9095 1848685467 tkvercn1 0 DELETE ( DROP TABLE HOA.ADMIN_QA 9096 1848685467 tkvercn1 0 DELETE ( 9097 1848685467 tkvercn1 0 DELETE ( NOTE: Deleting HOA.ADMIN_QA (memtype=DATA). NOTE: PROCEDURE DELETE used (Total process time): real time 0.26 seconds cpu time 0.03 seconds 31 32 DATA HOA.ADMIN_QA; 33 SET D.SUMMARY&YEARMTH._0169; 34 LOAD_DATE=TODAY(); 35 FORMAT LOAD_DATE MMDDYY10.; 36 LENGTH LOAD_BY $20; 37 LOAD_BY="&_CLIENTUSERID."; 38 RUN; 2 The SAS System 11:54 Tuesday, July 31, 2018 9098 1848685468 tkvercn1 0 DATASTEP ORACLE_3: Prepared: on connection 1 9099 1848685468 tkvercn1 0 DATASTEP SELECT * FROM HOA.ADMIN_QA 9100 1848685468 tkvercn1 0 DATASTEP 9101 1848685468 tkvercn1 0 DATASTEP NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables. 9102 1848685468 tkvercn1 0 DATASTEP ORACLE_4: Executed: on connection 2 9103 1848685468 tkvercn1 0 DATASTEP CREATE TABLE HOA.ADMIN_QA(YEARMTH DATE,PPG VARCHAR2 (64),LOB VARCHAR2 (56),PLAN_PARTNER VARCHAR2 (16),SEGMENT VARCHAR2 (64),FACILITY VARCHAR2 (800),FACILITY_ID VARCHAR2 (800),SUM_Administrative NUMBER ,SUM_MEMBER NUMBER ,Administrative_PTMPY NUMBER (7,2),LOAD_DATE DATE,LOAD_BY VARCHAR2 (80)) 9104 1848685468 tkvercn1 0 DATASTEP 9105 1848685468 tkvercn1 0 DATASTEP 9106 1848685468 tkvercn1 0 DATASTEP ORACLE_5: Prepared: on connection 2 9107 1848685468 tkvercn1 0 DATASTEP INSERT INTO HOA.ADMIN_QA (YEARMTH,PPG,LOB,PLAN_PARTNER,SEGMENT,FACILITY,FACILITY_ID,SUM_Administrative,SUM_MEMBER,Administrative_PTMPY,LOAD_DATE,LOAD_BY) VALUES (TO_DATE(:YEARMTH,'DDMONYYYY','NLS_DATE_LANGUAGE=American'),:PPG,:LOB,:PLAN_PARTNER,:SEGMENT,:FACILITY,:FACILITY_ID,:SUM_Administrat ive,:SUM_MEMBER,:Administrative_PTMPY,TO_DATE(:LOAD_DATE,'DDMONYYYY','NLS_DATE_LANGUAGE=American'),:LOAD_BY) 9108 1848685468 tkvercn1 0 DATASTEP 9109 1848685468 tkvercn1 0 DATASTEP **NOTE**: ORACLE_5 on connection 2The Execute statements associated with this Insert statement are suppressed due to SASTRACE brief setting-SASTRACE=',,,bd'. Remove the 'b' to get full trace. 9110 1848685468 tkvercn1 0 DATASTEP NOTE: There were 7103 observations read from the data set D.SUMMARY201807_0169. NOTE: The data set HOA.ADMIN_QA has 7103 observations and 12 variables. NOTE: DATA statement used (Total process time): real time 0.92 seconds cpu time 0.07 seconds 39 40 PROC DELETE DATA=HOA.OBSER_QA; 41 RUN; 9111 1848685468 tkvercn1 0 DELETE ( ORACLE_717: Prepared: on connection 1 9112 1848685468 tkvercn1 0 DELETE ( SELECT * FROM HOA.OBSER_QA 9113 1848685468 tkvercn1 0 DELETE ( 9114 1848685468 tkvercn1 0 DELETE ( 9115 1848685469 tkvercn1 0 DELETE ( ORACLE_718: Executed: on connection 1 9116 1848685469 tkvercn1 0 DELETE ( DROP TABLE HOA.OBSER_QA 9117 1848685469 tkvercn1 0 DELETE ( 9118 1848685469 tkvercn1 0 DELETE ( NOTE: Deleting HOA.OBSER_QA (memtype=DATA). NOTE: PROCEDURE DELETE used (Total process time): real time 0.11 seconds cpu time 0.00 seconds 42 43 DATA HOA.OBSER_QA; 44 SET D.SUMMARY&YEARMTH._0762; 45 LOAD_DATE=TODAY(); 46 FORMAT LOAD_DATE MMDDYY10.; 47 LENGTH LOAD_BY $20; 48 LOAD_BY="&_CLIENTUSERID."; 49 RUN; 9119 1848685469 tkvercn1 0 DATASTEP 3 The SAS System 11:54 Tuesday, July 31, 2018 ORACLE_719: Prepared: on connection 1 9120 1848685469 tkvercn1 0 DATASTEP SELECT * FROM HOA.OBSER_QA 9121 1848685469 tkvercn1 0 DATASTEP 9122 1848685469 tkvercn1 0 DATASTEP NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables. 9123 1848685469 tkvercn1 0 DATASTEP ORACLE_720: Executed: on connection 2 9124 1848685469 tkvercn1 0 DATASTEP CREATE TABLE HOA.OBSER_QA(YEARMTH DATE,PPG VARCHAR2 (64),LOB VARCHAR2 (56),PLAN_PARTNER VARCHAR2 (16),SEGMENT VARCHAR2 (64),FACILITY VARCHAR2 (800),FACILITY_ID VARCHAR2 (800),SUM_Observation NUMBER ,SUM_MEMBER NUMBER ,Observation_PTMPY NUMBER (7,2),LOAD_DATE DATE,LOAD_BY VARCHAR2 (80)) 9125 1848685469 tkvercn1 0 DATASTEP 9126 1848685469 tkvercn1 0 DATASTEP 9127 1848685469 tkvercn1 0 DATASTEP ORACLE_721: Prepared: on connection 2 9128 1848685469 tkvercn1 0 DATASTEP INSERT INTO HOA.OBSER_QA (YEARMTH,PPG,LOB,PLAN_PARTNER,SEGMENT,FACILITY,FACILITY_ID,SUM_Observation,SUM_MEMBER,Observation_PTMPY,LOAD_DATE,LOAD_BY) VALUES (TO_DATE(:YEARMTH,'DDMONYYYY','NLS_DATE_LANGUAGE=American'),:PPG,:LOB,:PLAN_PARTNER,:SEGMENT,:FACILITY,:FACILITY_ID,:SUM_Observation ,:SUM_MEMBER,:Observation_PTMPY,TO_DATE(:LOAD_DATE,'DDMONYYYY','NLS_DATE_LANGUAGE=American'),:LOAD_BY) 9129 1848685469 tkvercn1 0 DATASTEP 9130 1848685469 tkvercn1 0 DATASTEP **NOTE**: ORACLE_721 on connection 2The Execute statements associated with this Insert statement are suppressed due to SASTRACE brief setting-SASTRACE=',,,bd'. Remove the 'b' to get full trace. 9131 1848685469 tkvercn1 0 DATASTEP ERROR: ERROR: ERROR: ORACLE execute error: ORA-01438: value larger than specified precision allowed for this column. With the occurrence of the above ERROR, the error limit of 1 set by the ERRLIMIT= option has been reached. ROLLBACK has been issued(Any Rows processed after the last COMMIT are lost). Total rows processed: 15422 Rows failed : 1 NOTE: The SAS System stopped processing this step because of errors. NOTE: There were 15430 observations read from the data set D.SUMMARY201807_0762. WARNING: The data set HOA.OBSER_QA may be incomplete. When this step was stopped there were 15429 observations and 12 variables. ERROR: ROLLBACK issued due to errors for data set HOA.OBSER_QA.DATA. NOTE: DATA statement used (Total process time): real time 1.50 seconds cpu time 0.26 seconds 50 51 52 53 54 %LET _CLIENTTASKLABEL=; 55 %LET _CLIENTPROCESSFLOWNAME=; 56 %LET _CLIENTPROJECTPATH=; 57 %LET _CLIENTPROJECTPATHHOST=; 58 %LET _CLIENTPROJECTNAME=; 59 %LET _SASPROGRAMFILE=; 60 %LET _SASPROGRAMFILEHOST=; 61 62 ;*';*";*/;quit;run; 63 ODS _ALL_ CLOSE; 64 65 66 QUIT; RUN; 67
You show us a data step and an SQL error?
Run this before the code
options sastrace=',,,db' sastraceloc=saslog ;
and show us the full log please
As you wish. Done.
It is best to avoid attached documents, especially MS documents, as these can contain nasty payloads.
Many are not allowed, or are unwilling to download such documents.
It not not necessary here, Just post the log using {i} to format it. or attach a text file please.
To clarify the issue:
How do I figure out which column is causing the problem: ORACLE execute error: ORA-01438: value larger than specified precision allowed for this column?
I am running SAS code and getting an incomplete dataset with an Oracle error.
I've searched the internet and know that this cannot be caused by a VARCHAR. I am not sure if it can be a date, but I'm assuming not though I don’t have proof. I haven't seen anything saying it can or cant.
There are three NUMBER variables in the dataset I'm trying to update. Specifically,
DESCRIBE OBSER_QA:
Name | Null | Type |
YEARMTH |
| DATE |
PPG |
| VARCHAR2(64) |
LOB |
| VARCHAR2(56) |
PLAN_PARTNER |
| VARCHAR2(16) |
SEGMENT |
| VARCHAR2(64) |
FACILITY |
| VARCHAR2(800) |
FACILITY_ID |
| VARCHAR2(800) |
SUM_OBSERVATION |
| NUMBER |
SUM_MEMBER |
| NUMBER |
OBSERVATION_PTMPY |
| NUMBER(7,2) |
LOAD_DATE |
| DATE |
LOAD_BY |
| VARCHAR2(80) |
My understanding is that Number = Number(38,0) = Number(*,0), right?
I’m taking values from a SAS table and putting them into this Oracle one when I get the error.
ERROR: ORACLE execute error: ORA-01438: value larger than specified precision allowed for this column.
I assumed the issue was OBSERVATION_PTMPY since it’s the only one that’s limited. NUMBER(8,2) -> ERROR, NUMBER(9,2) -> ERROR, NUMBER(*,2) -> NUMBER(38,2) -> ERROR.
I also looked at the max values for the numeric columns I was bringing in:
M_OBS | M_MBR | M_OBSPTMPY |
451 | 126628 | 120000 |
Precisions of 3, 6, and 2, right?
Thank you for the log.
The help you are now seeking is for a different error. The message you first reported was
"ERROR: This SQL statement will not be passed to the DBMS for processing because it involves a join across librefs with different connection properties."
It is difficult to help when posts shift like this.
About the message now questioned "ERROR: ORACLE execute error: ORA-01438: value larger than specified precision allowed for this column." , Oracle is always very thrifty when giving information about its errors.
Since you have identified possible candidate values, I would just just try inserting these see if they trigger the error.
Otherwise I'd look the values for OBSERVATION_PTMPY first (still by trying to insert).
Trial and error will help you isolate what makes Oracle choke.
Number(38,0) = Number(*,0), right?
Yes
When I do:
DATA HOA.SUMMARY201807_0762; SET D.SUMMARY201807_0762; RUN;
I get:
ERROR: ERROR: ERROR: ORACLE execute error: ORA-01438: value larger than specified precision allowed for this column. With the occurrence of the above ERROR, the error limit of 1 set by the ERRLIMIT= option has been reached. ROLLBACK has been issued(Any Rows processed after the last COMMIT are lost). Total rows processed: 15422 Rows failed : 1
That's same message you had.
You need to:
- Identify which value generated the message as discussed above. Do do this only insert one record with the value you suspect is the culprit and see if the message is generated.
- Decide what to do then. Either you modify the SAS value before insertion, or you ask the Oracle people to change the field type to accept your large and valid value..
1. I mentioned the above because in that case I was not doing a delete then a create table which sql seems to interpret as truncate and insert. (Is that right?)
- Use the trace option I gave you and you'll see the code sent to Oracle
I suspected the value was that of Obs 15430, based on the log, but that's ".". Then I pulled 15422-15450. 15422 looks questionable.
- So have you isolated the row? and then the column? Just insert this to see if the error message comes.
Originially I thought the dataset had a predetermined column value type and that a value was being inserted that could not be displayed. The simple set to a new dataset makes me think that that's not the issue.
- I don't see how using SET when inserting would avoid the problem.
a table name that did not previoiusly exist
- I doubt SAS would create an Oracle column with type NUMBER(7,2). If it does that is worth looking into. Again look at the code sent to Oracle
Problem solved, it seems. We didn't retain the structure and just insert new rows. We created a table from scratch or replaced one. We also changed the format of the problem variable.
We used format = 8.
The following went through without errors:
proc sql; create table hoa.obser_qa_matt as select yearmth ,ppg ,plan_partner ,segment ,facility ,facility_id ,sum_observation ,sum_member ,observation_ptmpy format = 8. from work.summary201807_07626950; quit;
Good! This number(7.2) variable always looked like the culprit, and as long as Oracle had that column you were going to have trouble.
So you took the second option of:
Either you modify the SAS value before insertion, or you [..] change the field type to accept your large and valid value.
which is the better one as you can keep your data intact,
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.