Reg: Creation of Table Types
Hi All,
I have a small question regaridng the creation of Table type.
Let us suppose I am creating Table type for a custom table zsample which is having 5 fields. I am generally creating a structure similar to custom table and using that structure as line type for the table type. Let us suppose if there are any changes in the custom table like change in the order of fields or if new fields are added the table type will give dump.
My question is If I use the custom table itself as a line type, will there be any effect in the performance or some thing or I can go ahead and use it..
Thanks,
Ravee
What dump are you expecting ???
It is idea behind the creation with reference to get structures and tables which always look like
the tables they refer to.
I can not see a possibilty for a dump as long as you create only an internal table.
A dump could appear, if the internal table is later used to update another db-table. But there it should be clear that the structure of an internal should be created with reference to the tables which they change.
Siegfried
Similar Messages
-
Creation of a Table Type value set with 'ALL' as one of the value
Gurus,
My requirement is to create [table type]value set which would show the [LOV]values in parameter of Conc Progr .
So far we have three such values to chose from ,they are, 'Frozen', 'Pending' and 'Testing'. I achieved it.
My question is ,
if user wants to choose 'ALL' three values , how shall I accommodate it in this table type value set?
Giving fourth option as ALL, which would eventually select 'ALL' three values 'Frozen', 'Pending' and 'Testing'.
thanks in advance.
-sDJYou can't have UNION in the value set.
Try creating a view, which is having UNION with ALL.
Check the following links.
Table Value Set.
ORA-00907 Missing Right Parenthesis in Value Set
By
Vamsi -
Reg. Creation of table dynamically
Hi Experts,
While creating a table dynamically some of the fields in it_lvc_cat are Integer but the created table (new_table) contains all the fields as character. Is there any possibility of changing the datatype as interger for required fields.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_lvc_cat
IMPORTING
ep_table = new_table.
Regards,
Vijay.Hi,
Refer this code:
REPORT zmtable LINE-SIZE 255
LINE-COUNT 65.
Program written by Vijay Chaitanya Raju
Maintain Table dynamicly (Table name is entered on Selection Screen)
Very powerfull program. Please maintain authorisation access and
restrict maintenance to Z-tables
Version 6.20 and up
(can be used in 4.6C with some modifications to block try - endtry
and classes)
Enhanced functionality with dynamic selection screen
TABLES: sscrfields. "Fields on selection screens
TYPE-POOLS rsds.
DATA ds_clauses TYPE rsds_where.
DATA: BEGIN OF ifield OCCURS 0,
fieldname LIKE dd03l-fieldname,
position LIKE dd03l-position,
keyflag LIKE dd03l-keyflag,
datatype LIKE dd03l-datatype.
DATA: END OF ifield.
DATA: sl_step LIKE sy-tabix,
ss_step LIKE sy-subrc,
ss_act(1) TYPE c,
sl_lines LIKE sy-tfill,
sl_status LIKE sy-subrc,
sl_subrc LIKE sy-subrc,
sl_update(1) TYPE c,
sl_mandt(1) TYPE c,
len(6) TYPE n,
f_value(255) TYPE c,
sl_datum LIKE sy-datum,
sl_uzeit LIKE sy-uzeit,
price1(15) TYPE c,
price2(15) TYPE c,
mess(60) TYPE c,
d_stat LIKE sy-subrc,
m_stat LIKE sy-subrc,
slchar(6) TYPE c.
DATA: ref_ptr TYPE REF TO cx_root. "Root class more common
DATA: text TYPE string.
DATA: sl_index LIKE sy-tabix.
DATA: zauth LIKE dd02l-tabname.
DATA: num TYPE i,
max_len TYPE i,
check_len TYPE i,
sl_sel(1) TYPE c.
TYPE-POOLS: icon.
SELECTION-SCREEN.
SELECTION-SCREEN BEGIN OF LINE.
text-012 - 'Table Name'
SELECTION-SCREEN COMMENT 1(25) text-012.
PARAMETERS: tabname LIKE dd02l-tabname DEFAULT 'ZSCARE'.
text-003 - 'Selection'
SELECTION-SCREEN PUSHBUTTON 75(9) text-003 USER-COMMAND sta1.
SELECTION-SCREEN END OF LINE.
numrows(text) - 'Max Number of ROWS'
PARAMETERS: numrows LIKE sy-subrc DEFAULT '100'.
At Selection-Screen *
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'STA1'.
CLEAR sl_sel.
CALL FUNCTION 'ZSTAN_SELECTIONS'
EXPORTING
tabname = tabname
IMPORTING
ds_clauses = ds_clauses
EXCEPTIONS
table_not_valid = 1
other_error = 2
OTHERS = 3.
IF sy-subrc = 0.
sl_sel = 'X'.
ENDIF.
ENDCASE.
*At Selection-Screen Output *
AT SELECTION-SCREEN OUTPUT.
SELECT SINGLE tabname
INTO tabname
FROM dd02l
WHERE tabname = tabname
AND as4local = 'A'
AND ( tabclass = 'TRANSP' OR tabclass = 'POOL'
OR tabclass = 'CLUSTER' ).
IF sy-subrc <> 0.
MESSAGE 'Table is not valid' TYPE 'S'.
RETURN.
ENDIF.
START-OF-SELECTION.
START-OF-SELECTION.
DEFINE: acheck.
zauth = 'ZTABAUTH'.
select single statu
into sl_update
from (zauth)
where tabname = tabname
and bname = sy-uname.
if sy-subrc <> 0.
message 'You are not authorized to view this table' type 'S'.
return.
endif.
END-OF-DEFINITION.
SELECT SINGLE tabname
INTO tabname
FROM dd02l
WHERE tabname = tabname
AND as4local = 'A'
AND ( tabclass = 'TRANSP' OR tabclass = 'POOL'
OR tabclass = 'CLUSTER' ).
IF sy-subrc <> 0.
MESSAGE 'Table is not valid' TYPE 'S'.
RETURN.
ENDIF.
DATA: ptr_itab TYPE REF TO data.
FIELD-SYMBOLS: <fs_itab> TYPE STANDARD TABLE. "ANY TABLE.
CREATE DATA ptr_itab TYPE STANDARD TABLE OF (tabname).
ASSIGN ptr_itab->* TO <fs_itab>.
For DELETION
DATA: ptr_itd TYPE REF TO data.
FIELD-SYMBOLS: <fs_itd> TYPE STANDARD TABLE.
CREATE DATA ptr_itd TYPE STANDARD TABLE OF (tabname).
ASSIGN ptr_itd->* TO <fs_itd>.
For MODIFICATION
DATA: ptr_itm TYPE REF TO data.
FIELD-SYMBOLS: <fs_itm> TYPE STANDARD TABLE.
CREATE DATA ptr_itm TYPE STANDARD TABLE OF (tabname).
ASSIGN ptr_itm->* TO <fs_itm>.
DATA: ptr_wtab TYPE REF TO data.
FIELD-SYMBOLS: <fs_wtab> TYPE ANY.
CREATE DATA ptr_wtab TYPE (tabname).
ASSIGN ptr_wtab->* TO <fs_wtab>.
DATA: itabname(15) TYPE c.
itabname = '<fs_wtab>'.
Standard list status with 'SAVE' button
SET PF-STATUS 'STLI'.
CLEAR sl_update.
Maintain authorisation access in table ZTABAUTH
Key fields: tabname - Table name
bname = sy-uname - User name
statu = 'X' - maintain
' ' - view
Check authorisation access
acheck.
SELECT fieldname position keyflag datatype
INTO TABLE ifield
FROM dd03l
WHERE tabname = tabname
AND fieldname NOT LIKE '.INCLU%'
ORDER BY position.
FIELD-SYMBOLS: <f1> TYPE ANY.
DATA: tab_field(60) TYPE c,
sline LIKE sy-lisel.
DATA: field_attr LIKE dfies.
DATA: BEGIN OF tfield_attr OCCURS 0.
INCLUDE STRUCTURE field_attr.
DATA: END OF tfield_attr.
LOOP AT ifield.
CALL FUNCTION 'G_FIELD_READ'
EXPORTING
table = tabname
fieldname = ifield-fieldname
text_flag = 'X'
IMPORTING
field_attr = field_attr.
tfield_attr = field_attr.
APPEND tfield_attr.
ENDLOOP.
IF sl_sel = 'X'.
SELECT *
FROM (tabname)
INTO TABLE <fs_itab> UP TO numrows ROWS
WHERE (ds_clauses-where_tab).
ELSE.
SELECT *
FROM (tabname)
INTO TABLE <fs_itab> UP TO numrows ROWS.
ENDIF.
DESCRIBE TABLE <fs_itab> LINES sl_lines.
Show two extra lines to allow addition up to 2 new lines
IF sl_update = 'X'.
DO 2 TIMES.
APPEND INITIAL LINE TO <fs_itab>.
ENDDO.
ENDIF.
DATA: info(22) VALUE 'D - Delete, M - Modify'.
WRITE: / icon_information AS ICON QUICKINFO info.
WRITE ' '.
CLEAR check_len.
LOOP AT tfield_attr.
IF tfield_attr-datatype = 'CLNT'.
CONTINUE.
ENDIF.
len = tfield_attr-outputlen.
IF tfield_attr-keyflag = 'X'.
check_len = check_len + len + 1.
ENDIF.
IF tfield_attr-scrtext_m IS NOT INITIAL.
WRITE: AT (len) tfield_attr-scrtext_m COLOR 1.
ELSE.
WRITE: AT (len) tfield_attr-fieldtext COLOR 1.
ENDIF.
ENDLOOP.
CLEAR ss_step.
CLEAR ss_act.
LOOP AT <fs_itab> INTO <fs_wtab>.
IF sy-tabix LE sl_lines.
ss_step = 1.
ELSE.
CLEAR ss_step.
ENDIF.
In field SS_STEP put D - to delete record
M - to modify/add new record
IF sl_update = 'X'.
WRITE:/ icon_change AS ICON.
IF ss_step = 1.
WRITE: ss_act INPUT ON.
ELSE.
ss_act = 'M'.
WRITE: ss_act.
CLEAR ss_act.
ENDIF.
ELSE.
WRITE:/ icon_display AS ICON.
WRITE: ss_act COLOR 2.
ENDIF.
LOOP AT ifield.
Maintain client dependant tables in the same client
IF ifield-datatype = 'CLNT'.
sl_mandt = 'X'.
CONTINUE.
ENDIF.
CONCATENATE itabname '-' ifield-fieldname INTO tab_field.
ASSIGN (tab_field) TO <f1>.
IF sl_update = 'X'.
IF ifield-keyflag = 'X' AND ss_step IS NOT INITIAL.
WRITE: <f1> COLOR 4.
ELSE.
WRITE: <f1> INPUT ON.
ENDIF.
ELSE.
IF ifield-keyflag = 'X' AND ss_step IS NOT INITIAL.
WRITE: <f1> COLOR 4.
ELSE.
WRITE: <f1> COLOR 2.
ENDIF.
ENDIF.
UNASSIGN <f1>.
ENDLOOP.
ENDLOOP.
END-OF-SELECTION.
END-OF-SELECTION.
AT USER-COMMAND.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SAVE'.
IF sl_update = 'X'.
CLEAR: sl_step,
sl_status,
sl_subrc,
<fs_wtab>,
d_stat,
m_stat,
max_len.
REFRESH <fs_itd>.
REFRESH <fs_itm>.
DO.
IF sl_status <> 0.
EXIT.
ENDIF.
ADD 1 TO sl_step.
IF sl_subrc <> 0.
EXIT.
ENDIF.
CLEAR ss_step.
CLEAR ss_act.
READ LINE sl_step
FIELD VALUE ss_act INTO f_value.
sl_subrc = sy-subrc.
IF f_value(1) EQ 'D' OR f_value(1) = 'd'.
ss_step = 1. "Delete
ELSEIF f_value(1) EQ 'M' OR f_value(1) = 'm'.
ss_step = 2. "Modify
ELSE.
CLEAR ss_step.
ENDIF.
CHECK sy-lisel(3) = '0Z '.
IF ss_step GT 0.
CLEAR sline.
sline = sy-lisel+5(250).
max_len = 250.
CHECK sline(check_len) <> ' '.
LOOP AT tfield_attr.
CONCATENATE itabname '-' tfield_attr-fieldname
INTO tab_field.
ASSIGN (tab_field) TO <f1>.
IF tfield_attr-fieldname = 'MANDT'.
<f1> = sy-mandt.
ELSE.
CLEAR f_value.
IF max_len LT tfield_attr-outputlen.
max_len = 255.
ADD 1 TO sl_step.
READ LINE sl_step.
sline = sy-lisel.
ENDIF.
f_value = sline(tfield_attr-outputlen).
max_len = max_len - tfield_attr-outputlen - 1.
IF tfield_attr-inttype = 'D'.
IF f_value CO ' 0./-'.
CLEAR sl_datum.
<f1> = sl_datum.
ELSE.
CALL FUNCTION 'CONVERT_DATE_INPUT'
EXPORTING
input = f_value
plausibility_check = 'X'
IMPORTING
output = sl_datum
EXCEPTIONS
plausibility_check_failed = 1
wrong_format_in_input = 2
OTHERS = 3.
IF sy-subrc = 0.
<f1> = sl_datum.
ELSE.
text = 'Invalid Date'.
sl_status = 1.
EXIT.
ENDIF.
ENDIF.
ELSEIF tfield_attr-inttype = 'T'.
IF f_value CO ' 0:'.
CLEAR sl_uzeit.
<f1> = sl_uzeit.
ELSE.
CALL FUNCTION 'CONVERT_TIME_INPUT'
EXPORTING
input = f_value
plausibility_check = 'X'
IMPORTING
output = sl_uzeit
EXCEPTIONS
plausibility_check_failed = 1
wrong_format_in_input = 2
OTHERS = 3.
IF sy-subrc = 0.
<f1> = sl_uzeit.
ELSE.
text = 'Invalid Time'.
sl_status = 1.
EXIT.
ENDIF.
ENDIF.
ELSEIF tfield_attr-inttype = 'C'.
TRANSLATE f_value TO UPPER CASE.
<f1> = f_value.
ELSE.
TRANSLATE f_value USING ', '.
CONDENSE f_value NO-GAPS.
TRY.
<f1> = f_value.
CATCH cx_root INTO ref_ptr.
text = ref_ptr->get_text( ).
sl_status = 1.
EXIT.
ENDTRY.
ENDIF.
SHIFT sline BY tfield_attr-outputlen PLACES.
SHIFT sline LEFT.
ENDIF.
UNASSIGN <f1>.
ENDLOOP.
IF sl_status = 0.
CASE ss_step.
WHEN 1. "Delete
ADD 1 TO d_stat.
APPEND <fs_wtab> TO <fs_itd>.
WHEN 2. "Modify
ADD 1 TO m_stat.
APPEND <fs_wtab> TO <fs_itm>.
ENDCASE.
ENDIF.
ENDIF.
ENDDO.
IF sl_status = 0.
IF d_stat IS NOT INITIAL.
slchar = d_stat.
CONCATENATE 'Deleted -' slchar 'record.' INTO text
SEPARATED BY space.
DELETE (tabname) FROM TABLE <fs_itd>.
ENDIF.
IF m_stat IS NOT INITIAL.
slchar = m_stat.
CONCATENATE text 'Modified -' slchar 'record.' INTO text
SEPARATED BY space.
MODIFY (tabname) FROM TABLE <fs_itm>.
ENDIF.
IF d_stat IS INITIAL AND m_stat IS INITIAL.
MESSAGE 'No changes were done' TYPE 'S'.
ELSE.
MESSAGE text TYPE 'S'.
ENDIF.
LEAVE.
ELSE.
MESSAGE text TYPE 'I'.
EXIT.
ENDIF.
ELSE.
LEAVE.
ENDIF.
ENDCASE.
*--END--
Below is Function for a Dynamic Selection Screen
FUNCTION zstan_selections.
""Local interface:
*" IMPORTING
*" VALUE(TABNAME) LIKE DD02L-TABNAME DEFAULT 'ZSCARE'
*" EXPORTING
*" VALUE(DS_CLAUSES) TYPE RSDS_WHERE
*" EXCEPTIONS
*" TABLE_NOT_VALID
*" OTHER_ERROR
DATA texpr TYPE rsds_texpr.
DATA twhere TYPE rsds_twhere.
DATA trange TYPE rsds_trange.
DATA BEGIN OF qcat. "Selections View for
INCLUDE STRUCTURE rsdsqcat. "Free Selectoptions
DATA END OF qcat.
DATA BEGIN OF tabs OCCURS 10.
INCLUDE STRUCTURE rsdstabs.
DATA END OF tabs.
DATA BEGIN OF fields OCCURS 10.
INCLUDE STRUCTURE rsdsfields.
DATA END OF fields.
DATA BEGIN OF efields OCCURS 10.
INCLUDE STRUCTURE rsdsfields.
DATA END OF efields.
DATA selid LIKE rsdynsel-selid.
DATA actnum LIKE sy-tfill.
DATA title LIKE sy-title VALUE 'Selection Screen'.
DATA: maxnum LIKE sy-subrc VALUE '69'.
CLEAR tabs.
tabs-prim_tab = tabname.
COLLECT tabs.
DATA: position LIKE dd03l-position.
DATA: keyflag LIKE dd03l-keyflag.
CLEAR fields.
fields-tablename = tabname.
fields-sign = 'I'.
DATA: step LIKE sy-subrc.
SELECT fieldname keyflag position
INTO (fields-fieldname, keyflag, position)
FROM dd03l
WHERE tabname = tabname
AND fieldname NOT LIKE '.INCLU%'
AND datatype NE 'CLNT'
ORDER BY position.
ADD 1 TO step.
CHECK step LE maxnum.
IF keyflag <> 'X'.
efields = fields.
APPEND efields.
ENDIF.
APPEND fields.
ENDSELECT.
IF sy-subrc <> 0.
RAISE table_not_valid.
ENDIF.
CALL FUNCTION 'FREE_SELECTIONS_INIT'
EXPORTING
expressions = texpr
kind = 'F'
IMPORTING
selection_id = selid
expressions = texpr
where_clauses = twhere
field_ranges = trange
number_of_active_fields = actnum
TABLES
tables_tab = tabs
fields_tab = fields
fields_not_selected = efields
EXCEPTIONS
fields_incomplete = 01
fields_no_join = 02
field_not_found = 03
no_tables = 04
table_not_found = 05
expression_not_supported = 06
incorrect_expression = 07
illegal_kind = 08
area_not_found = 09
inconsistent_area = 10
kind_f_no_fields_left = 11
kind_f_no_fields = 12
too_many_fields = 13.
IF sy-subrc = 0.
CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
EXPORTING
selection_id = selid
title = title
IMPORTING
where_clauses = twhere
expressions = texpr
field_ranges = trange
number_of_active_fields = actnum
TABLES
fields_tab = fields
EXCEPTIONS
internal_error = 01
no_action = 02
no_fields_selected = 03
no_tables_selected = 04
selid_not_found = 05.
IF sy-subrc = 0.
CLEAR ds_clauses.
MOVE tabname TO ds_clauses-tablename.
READ TABLE twhere WITH KEY ds_clauses-tablename INTO ds_clauses.
IF sy-subrc <> 0.
RAISE other_error.
ENDIF.
ELSE.
RAISE other_error.
ENDIF.
ELSE.
RAISE other_error.
ENDIF.
ENDFUNCTION.
Regards,
Shiva -
Hi All,
can anyone tell me
What does table type mean?
Why table type is used?
What are the advantages of using Table Type?
Regards,
Chandra PrakashHi,
Table Types
A table type describes the structure and functional attributes of an internal table in ABAP. In ABAP programs you can reference a table type TTYP defined in the ABAP Dictionary with the command DATA <inttab> TYPE TTYP. An internal table <inttab> is created in the program with the attributes defined for TTYP in the ABAP Dictionary.
A table type is defined by:
its line type, that defines the structure and data type attributes of a line of the internal table
the options for managing and accessing the data ( access mode) in the internal table
the key ( key definition and key category) of the internal table
The row type is defined by directly entering the data type, length and number of decimal places or by referencing a data element, structured type ( structure, table or view) or other table type. Or the row type can be a reference type.
Table type TABTYPE shown in the graphic can be used with the statement DATA <name> TYPE TABTYPE in ABAP programs to define an internal table <name>.
A local type <name> that takes on the attributes of type TABTYPE can be defined in the program with TYPES <name> TYPE TABTYPE.
Reward if Helpful -
Error in creation of Object Type from XML passed
Hi,
I am facing a problem creating a appropriate a object type for a XML.
Below are the details:
XML Passed
<mer_offer_action_data>
<form_id>
134039588
</form_id>
<action_cd>
OA
</action_cd>
<offer_decline_reason_cd>
</offer_decline_reason_cd>
<start_dt>
</start_dt>
<candidate>
<ds_prs_id>
109315
</ds_prs_id>
<ds_prs_id>
110534
</ds_prs_id>
<ds_prs_id>
110059
</ds_prs_id>
</candidate>
</mer_offer_action_data>
Types Declaration
+CREATE OR REPLACE type MER_OFF_CANDIDATE
AS
OBJECT
DS_PRS_ID NUMBER
CREATE OR REPLACE TYPE MER_OFF_CANDIDATE_t
AS
TABLE OF MER_OFF_CANDIDATE;
CREATE OR REPLACE type MER_OFFER_ACT_DATA
AS
OBJECT
FORM_ID NUMBER,
ACTION_CD VARCHAR2(6),
OFFER_DECLINE_REASON_CD VARCHAR2(6),
START_DT VARCHAR2(11),
CANDIDATE MER_OFF_CANDIDATE_t
CREATE OR REPLACE TYPE MER_OFFER_ACT_DATA_t
AS
TABLE OF MER_OFFER_ACT_DATA;
CREATE OR REPLACE type MER_OFFER_ACTION_DATA
AS
OBJECT
MER_OFF_ACT_DATA MER_OFFER_ACT_DATA_t
/+
My Declaration
+merOffActDataXML xmltype;
merOffActData MER_OFFER_ACTION_DATA := MER_OFFER_ACTION_DATA(MER_OFFER_ACT_DATA_t());+
Inside Pl/SQL block
+-- Converts XML data into user defined type for further processing of data
xmltype.toobject(merOffActDataXML,merOffActData);+
when I run the Pl/Sql block it gives me error
ORA-19031: XML element or attribute FORM_ID does not match any in type ORADBA.MER_OFFER_ACTION_DATA
which means the object type mapping is wrong
I would like to know whether the object type I had created is correct or not.
Thanks for your help
BedaBedabrata Patel wrote:
Below are the details:The details except for a description of the problem
I am facing a problem creating a appropriate a object type for a XML.And which error you are getting
Error in creation of Object Type http://download.oracle.com/docs/cd/E11882_01/server.112/e10880/toc.htm
And which version of Oracle you are getting the unknown error creating the unknown problem. -
Error in creation of Object Type
Hi,
I am facing a problem creating a appropriate a object type for a XML.
Below are the details:
XML Passed
<mer_offer_action_data>
<form_id>
134039588
</form_id>
<action_cd>
OA
</action_cd>
<offer_decline_reason_cd>
</offer_decline_reason_cd>
<start_dt>
</start_dt>
<candidate>
<ds_prs_id>
109315
</ds_prs_id>
<ds_prs_id>
110534
</ds_prs_id>
<ds_prs_id>
110059
</ds_prs_id>
</candidate>
</mer_offer_action_data>
Types Declaration
+CREATE OR REPLACE type MER_OFF_CANDIDATE
AS
OBJECT
DS_PRS_ID NUMBER
CREATE OR REPLACE TYPE MER_OFF_CANDIDATE_t
AS
TABLE OF MER_OFF_CANDIDATE;
CREATE OR REPLACE type MER_OFFER_ACT_DATA
AS
OBJECT
FORM_ID NUMBER,
ACTION_CD VARCHAR2(6),
OFFER_DECLINE_REASON_CD VARCHAR2(6),
START_DT VARCHAR2(11),
CANDIDATE MER_OFF_CANDIDATE_t
CREATE OR REPLACE TYPE MER_OFFER_ACT_DATA_t
AS
TABLE OF MER_OFFER_ACT_DATA;
CREATE OR REPLACE type MER_OFFER_ACTION_DATA
AS
OBJECT
MER_OFF_ACT_DATA MER_OFFER_ACT_DATA_t
/+
My Declaration
+merOffActDataXML xmltype;
merOffActData MER_OFFER_ACTION_DATA := MER_OFFER_ACTION_DATA(MER_OFFER_ACT_DATA_t());+
Inside Pl/SQL block
+-- Converts XML data into user defined type for further processing of data
xmltype.toobject(merOffActDataXML,merOffActData);+
Thanks for your help
Beda
Edited by: Bedabrata Patel on Jul 12, 2010 5:51 AMBedabrata Patel wrote:
Below are the details:The details except for a description of the problem
I am facing a problem creating a appropriate a object type for a XML.And which error you are getting
Error in creation of Object Type http://download.oracle.com/docs/cd/E11882_01/server.112/e10880/toc.htm
And which version of Oracle you are getting the unknown error creating the unknown problem. -
Creation of table of table dynamically
Hi everyone,
i have created an alv grid with a dynamic number of columns. Now i need to edit specific rows in the alv table. In the BCALV_EDIT_02 you need to create in the data table a field CELLTAB (wich is also a table), how can i do this ?
XavierHello Frederico
The once again revised version of my sample report demonstrates how to store PBO and PAI data. Please note the following naming convention:
- OUTTAB ==> itab for ALV list display with CELLTAB (i.e. a complex type)
- ITAB ==> flat itab without CELLTAB
*& Report ZUS_SDN_RTTI_CREATE_STRUCTUR_2
*& NOTE: 1st revised version of ZUS_SDN_RTTI_CREATE_STRUCTUR_1
REPORT zus_sdn_rtti_create_structur_2.
TYPE-POOLS: abap.
DATA:
celltab TYPE lvc_t_styl.
DATA:
gd_tabnam TYPE string,
gd_tabfield TYPE string,
go_table TYPE REF TO cl_salv_table,
go_sdescr TYPE REF TO cl_abap_structdescr,
go_sdescr_new TYPE REF TO cl_abap_structdescr,
go_tdescr TYPE REF TO cl_abap_tabledescr,
go_typedescr TYPE REF TO cl_abap_typedescr,
gdo_data TYPE REF TO data,
gdo_handle TYPE REF TO data,
gs_component TYPE abap_compdescr,
gs_comp TYPE abap_componentdescr,
gt_components TYPE abap_component_tab.
* name TYPE string,
* type TYPE REF TO cl_abap_datadescr,
* as_include TYPE abap_bool,
* suffix TYPE string,
FIELD-SYMBOLS:
<gd_fld> TYPE ANY, " single field
<gs_outtab> TYPE ANY, " structure with CELLTAB
<gs_itab> TYPE ANY, " structure without CELLTAB
<gt_itab_pbo> TYPE STANDARD TABLE, " without CELLTAB
<gt_itab_pai> TYPE STANDARD TABLE, " without CELLTAB
<gt_outtab_pbo> TYPE STANDARD TABLE, " with CELLTAB
<gt_outtab_pai> TYPE STANDARD TABLE. " with CELLTAB
PARAMETER:
p_tabnam TYPE tabname DEFAULT 'KNB1'.
PARAMETERS:
p_skip AS CHECKBOX DEFAULT 'X'. " skip simulation
START-OF-SELECTION.
" Describe structure
go_sdescr ?= cl_abap_structdescr=>describe_by_name( p_tabnam ).
gd_tabnam = go_sdescr->get_relative_name( ).
* Simulate dynamic addition of columns to ALV list
DO 5 TIMES.
READ TABLE go_sdescr->components INTO gs_component INDEX syst-index.
" Build fieldname
CONCATENATE gd_tabnam gs_component-name INTO gd_tabfield
SEPARATED BY '-'.
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_datadescr=>describe_by_name( gd_tabfield ).
gs_comp-name = gs_component-name.
APPEND gs_comp TO gt_components.
go_sdescr_new = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
" Create data refence followed by table creation
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pbo>.
* Dynamic select
SELECT * FROM (p_tabnam) UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE <gt_outtab_pbo>
WHERE bukrs = '2000'.
IF ( p_skip = abap_false ).
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_outtab_pbo>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
ENDIF.
ENDDO.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_outtab_pbo>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
" Display component list in order to prove that indeed the field names
" are used (instead of the data element names)
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = gt_components.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
" Create data reference for structure (without CELLTAB)!!!
CREATE DATA gdo_handle TYPE HANDLE go_sdescr_new.
REFRESH: gt_components.
CLEAR: gs_comp.
gs_comp-type ?=
cl_abap_structdescr=>describe_by_data_ref( gdo_handle ).
gs_comp-name = 'DATA'.
gs_comp-as_include = abap_true.
APPEND gs_comp TO gt_components.
" Add table type as field to structure ==> complex structure
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_typedescr=>describe_by_data( celltab ).
gs_comp-name = 'CELLTAB'.
APPEND gs_comp TO gt_components.
go_sdescr = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pbo>.
* Dynamic select
SELECT * FROM (p_tabnam) UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE <gt_outtab_pbo>
WHERE bukrs = '2000'.
PERFORM fill_celltab.
" Create second itab (PAI data)
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_outtab_pai>.
<gt_outtab_pai> = <gt_outtab_pbo>. " PAI data = PBO data
" Renumbering of customer makes it easier to spot the differences
LOOP AT <gt_outtab_pai> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <gs_outtab> TO <gd_fld>.
<gd_fld> = syst-tabix. " new numbering of customers
ENDLOOP.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <gs_outtab> TO <gd_fld>.
<gd_fld> = syst-tabix. " new numbering of customers
ENDLOOP.
DELETE <gt_outtab_pbo> INDEX 3. " ==> 3rd row in PAI data is new
DELETE <gt_outtab_pai> INDEX 7. " ==> 7th row in PBO data is DELE
" Shuffle data from outtab to corresponding itab (w/o CELLTAB)
PERFORM shuffle_outtab_to_itab.
" List output
PERFORM write_list.
EXIT.
" Simplified version of table creation:
CLEAR: gdo_data.
UNASSIGN <gt_outtab_pbo>.
CREATE DATA gdo_data TYPE STANDARD TABLE OF (p_tabnam).
ASSIGN gdo_data->* TO <gt_outtab_pbo>.
END-OF-SELECTION.
*& Form FILL_CELLTAB
* text
* --> p1 text
* <-- p2 text
FORM fill_celltab .
* define local data
DATA:
ls_cell TYPE lvc_s_styl,
lt_celltab TYPE lvc_t_styl.
FIELD-SYMBOLS:
<gs_struc> TYPE ANY,
<lt_celltab> TYPE lvc_t_styl.
" Create dummy entry for local CELLTAB
ls_cell-fieldname = 'BUKRS'.
ls_cell-style = cl_gui_alv_grid=>mc_style_enabled.
INSERT ls_cell INTO TABLE lt_celltab.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_struc>.
ASSIGN COMPONENT 'CELLTAB' OF STRUCTURE <gs_struc> TO <lt_celltab>.
<lt_celltab> = lt_celltab.
" No MODIFY required because we are working with the field symbol
ENDLOOP.
ENDFORM. " FILL_CELLTAB
*& Form SHUFFLE_OUTTAB_TO_ITAB
* text
* --> p1 text
* <-- p2 text
FORM shuffle_outtab_to_itab .
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab_pbo>.
go_tdescr = cl_abap_tabledescr=>create( go_sdescr_new ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab_pai>.
LOOP AT <gt_outtab_pbo> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <gs_outtab> TO <gs_itab>.
APPEND <gs_itab> TO <gt_itab_pbo>.
ENDLOOP.
LOOP AT <gt_outtab_pai> ASSIGNING <gs_outtab>.
ASSIGN COMPONENT 'DATA' OF STRUCTURE <gs_outtab> TO <gs_itab>.
APPEND <gs_itab> TO <gt_itab_pai>.
ENDLOOP.
ENDFORM. " SHUFFLE_OUTTAB_TO_ITAB
*& Form WRITE_LIST
* text
* --> p1 text
* <-- p2 text
FORM write_list .
WRITE: / 'PBO data:'.
LOOP AT <gt_itab_pbo> ASSIGNING <gs_itab>.
WRITE: / 'Record No.=', syst-tabix, '==>'.
DO.
ASSIGN COMPONENT syst-index OF STRUCTURE <gs_itab> TO <gd_fld>.
IF ( syst-subrc NE 0 ).
EXIT.
ENDIF.
WRITE: <gd_fld>.
ENDDO.
ENDLOOP.
SKIP 2.
WRITE: / 'PAI data:'.
LOOP AT <gt_itab_pai> ASSIGNING <gs_itab>.
WRITE: / 'Record No.=', syst-tabix, '==>'.
DO.
ASSIGN COMPONENT syst-index OF STRUCTURE <gs_itab> TO <gd_fld>.
IF ( syst-subrc NE 0 ).
EXIT.
ENDIF.
WRITE: <gd_fld>.
ENDDO.
ENDLOOP.
ENDFORM. " WRITE_LIST
Finally, if you want to know the <i>differences </i>between PAI and PBO data, that is which records have been deleted, updated or inserted have a look at my code sample
<a href="https://wiki.sdn.sap.com/wiki/display/Snippets/ComparingTwoInternalTables-AGeneric+Approach">Comparing Two Internal Tables - A Generic Approach</a>
Regards
Uwe -
[internal tables] TYPES or DATA
Hi,
starting with ABAP and try to understand internal tables. The structure
of an internal table isn't quiet clear. They have a work area and a table body,
but why do I need a additionally type of line?
Is this content, my tutorial uses DATA to define the itab and TYPES to define
the workarea (type of line). I don't really understand the different between those
commands.
Does anyone got a good web blog to understand internal tables completly?
thx
chrisHi,
The Statements TYPES and DATA
Each ABAP program define its own data types using the statement.
TYPES dtype TYPE type ...
and declare its own variables or instance attributes of classes using the statement
DATA var {TYPE type} ...
Within the program or a class, you can also define local data types and variables within procedures. Local variables in procedures obscure identically-named variables in the main program or class.
When creating data types and data objects, there are a number of naming convention that also apply for other local program definitions, such as procedures. These are described in detail in the keyword documentation.
The Additions TYPE and LIKE
The additions TYPE type and LIKE dobj are used in various ABAP statements. The additions can have various meanings, depending on the syntax and context.
· Definition of local types in a program
· Declaration of data objects
· Dynamic creation of data objects
· Specification of the type of formal parameters in subroutines
· Specification of the type of formal parameters in methods
· Specification of the type of field symbols
Constructing New Data Types
The TYPE addition allows you to construct new data types in the TYPES, DATA; CONSTANTS; and STATICSstatements. In the TYPES statement, these are local data types in the program. In the other statements, they are attributes of new data objects, meaning that the newly defined data types are not free-standing. Rather, they are linked to database objects.This means that you can refer to them using the LIKEaddition, but not using TYPE.
To construct new data types, the addition TYPE can be used with the following type constructors:
· Construction of reference types
REF TO type|dobj
· Construction of structured data types
BEGIN OF struc_type.
END OF struc_type.
· Construction of table types
tabkind OF linetype
These data types only exist during the runtime of the ABAP program.
Referring to Known Data Types or Data Objects
Using the additions TYPE or LIKE in the TYPESstatement, local data types in a program can be referred to known data types or data objects. This is mainly the case with user-defined elementary data types. If you declare variables using the additions TYPE type or LIKE dobj with statement DATA, the data type of var is already fully defined before the declaration is made.
The known types or data that are referred to must be visible at the point where the data type or variable is declared.
A known data type can be any of the following:
· A predefined ABAP type to which you refer using the TYPE addition
· An existing local data type in the program to which you refer using the TYPE addition
· The data type of a local data object in the program to which you refer using the LIKE addition
· A data type in the ABAP Dictionary to which you refer using the TYPE addition. To ensure compatibility with earlier releases, it is still possible to use the LIKE addition to refer to database tables and flat structures in the ABAP Dictionary. However, you should use the TYPE addition in new programs.
The LIKE addition takes its technical attributes from a visible data object. As a rule, you can use LIKE to refer to any object that has been declared using DATA or a similar statement, and is visible in the current context. The data object only has to have been declared. It is irrelevant whether the data object already exists in memory when you make the LIKE reference.
· In principle, the local data objects in the same program are visible. As with local data types, there is a difference between local data objects in procedures and global data objects. Data objects defined in a procedure obscure other objects with the same name that are declared in the global declarations of the program.
· You can also refer to the data objects of other visible ABAP programs. These might be, for example, the visible attributes of global classes in class pools. If a global class cl_lobal has a public instance attribute or static attribute attr, you can refer to it as follows in any ABAP program:
DATA dref TYPE REF TO cl_global.
DATA: f1 LIKE cl_global=>attr,
f2 LIKE dref->attr.
You can access the technical properties of an instance attribute using the class name and a reference variable without first having to create an object. The properties of the attributes of a class are not instance-specific and belong to the static properties of the class.
TYPES: BEGIN OF struct,
number_1 TYPE i,
number_2 TYPE p DECIMALS 2,
END OF struct.
DATA: wa_struct TYPE struct,
number LIKE wa_struct-number_2,
date LIKE sy-datum,
time TYPE t,
text TYPE string,
company TYPE s_carr_id.
This example declares variables with reference to the internal type STRUCT in the program, a component of an existing data object wa_struct, the predefined data object SY-DATUM, the predefined ABAP type t and STRING, and the data element S_CARR_ID from the ABAP Dictionary.
Referring to Generic Data Types
If you refer to one of the generic predefined ABAP types of fixed length (c, n, p, x) in the TYPES or DATA statement, you must specify the undefined technical attributes.
TYPES|DATA var[(length)] TYPE type ...
TYPES|DATA var TYPE type ...
DATA: text1,
text2 LENGTH 2,
text3 TYPE c LENGTH 3,
pack TYPE p DECIMALS 2 VALUE '1.225'.
This example creates three character variables with field lengths of one, two, and three bytes respectively, and a packed number variable with field length 8 bytes and two decimal places. If the attribute Fixed point arithmetic is set, the value of pack is 1.23.
This example shows how to declare elementary data objects with reference to predefined ABAP types.
PROGRAM demo_elementary_data_objects.
DATA text1 TYPE c LENGTH 20.
DATA text2 TYPE string.
DATA number TYPE i.
text1 = 'The number'.
number = 100.
text2 = 'is an integer.'.
WRITE: text1, number, text2.
This program produces the following output on the screen:
The number 100 is an integer.
In this example, the data objects text1, text2 and number are declared with the DATA statement. The technical attributes are determined by referring to the predefined ABAP types c, string, and I. Values from unnamed literals are assigned to the data objects. The contents of the named data objects are displayed on the list.
Specifying a Start Value
When you declare an elementary fixed-length variable, the DATAstatement automatically fills it with the type-specific initial value as listed in the table in the Predefined ABAP Types section.
However, you can also specify a starting value of a fixed-length elementary variable (also within a structure declaration) using the VALUE addition in the DATAstatement:
DATA var ... VALUE val|{IS INITIAL}.
Specifying start values:
DATA: counter TYPE p VALUE 1,
date TYPE d VALUE '19980601',
flag TYPE n VALUE IS INITIAL.
After this data declaration, the character string flag contains its type specific
Initial value 0.
Regarsd -
Proxy Table type not Generated
Hi Gui's,
I am woking on proxies while creating the proxis in SPROXY transaction proxy table type is not creating which we used in abap programing. what is the issue will you please guide me.
Thanks,
LakshmiDear Laxmi
For tAble creation in Sproxy you need to provide hirerchy in your SAP PI data type like this
DT_TYPE
row occurence 0: unbunded
dataFields
generally if we omit this row line then table does not gets created
so if you have not given hierarchy as per this please create a node row and provide hierrachy and assign occurence 0: unbounded
If you want you may give different name to this node row
Thanks
sandeep -
Stored procedure and function - return table type
Hello again :)
I have one simple question :) Maybe on this forum the question was asked, but I found only similar question and they didn't help me.
It's possible return in Stored Function (with StoredProcedureFunction) as result return TABLE type? Or return table type with output parametr with Stored Procedure? Or instead of the table return the db object, but it is similar problem:)
Now, I can using db types TABLES or DB OBJECTS as INPUT parameters with call stored functions or procedures, for example:
I have this simple db object:
create or replace type BUFFER_DATA_R as object( detail VARCHAR2(4000 ))
And this simple table:
CREATE OR REPLACE TYPE BUFFER_DATA_T IS TABLE OF BUFFER_DATA_R
I create simple domain class object:
*public class DMBufferDataStruct {*
public String bufferData;
And I mapped in java with ObjectRelationalDataTypeDescriptor:
ObjectRelationalDataTypeDescriptor descriptor = new ObjectRelationalDataTypeDescriptor();
descriptor.setJavaClass(DMBufferDataStruct.class);
descriptor.setTableName("BUFFER_DATA_T");
descriptor.setStructureName("BUFFER_DATA_R");
descriptor.setPrimaryKeyFieldName("DETAIL");
descriptor.addFieldOrdering("DETAIL");
descriptor.addDirectMapping("bufferData", "DETAIL");
and join to server session ...
Well, i using this doimain class object as input parametr wih stored procedure call:
ObjectRelationalDatabaseField ordf = new ObjectRelationalDatabaseField("");
ordf.setSqlType(Types.STRUCT);
spCall.addNamedArgument(key, key,
Types.ARRAY,
"BUFFER_DATA_T",
ordf);
query.addArgument(key);
args.add(paramsInputs.get(key));
in paramsInputs is Vector of DMBufferDataStruct...
Well, this work fine!
But I can not figure, how to return this table from output parameters of stored procedure or as a return value from stored function?
Example of exceptions:
The number of arguments provided to the query for execution does not match the number of arguments in the query definition. - return as output parameter
PLS-00382: expression is of wrong type - used as result from stored function
So, my question is: Is possible return this table type from stored procedure or function? And if YES, how can I set output argument for call?
Thx advance!
Sorry for my English! :)
Best regards, KLDYour question is: what is faster PL/SQL or PL/SQL? And the answer is: it is PL/SQL of course!
As a general rule, you use a function when you return exactly one result: a number or a string or (more complex) instance of an object type or REF CURSOR or PL/SQL collection.
You use a procedure when:
a) you just do the job and return no result
b) you return multiple results - you can use multiple IN/OUT or OUT parameters
Imagine you have to write a program unit that performs a partitioned table maintenance by adding a partition.
You can implement this unit:
a) if you want return a "status code" (0 on successful completion or non-zero in case of error) then you should use a function
b) if you want no "status code" (in case of error an exception is raised that is handled outside of the program unit) then you should use a procedure
c) if you want "status code", name of tablespace where a partition was created (assume you program is so complex that it can choose different tablespaces based on metadata and free space available) and free space in that tablespace after the creation of a new partition then you should use a procedure with 3 OUT parameters.
But these are good programming practices that can be applied to (almost) any 3rd generation programming language, not only PL/SQL. -
Creating table types for procedures at design time: Where is the "Local Table Type" tab?
Hello,
I want to write a stored procedure (development perspective, repository object) and need to create a table type for the result table.I am working on HANA Studio 1.80.1 and the documentation tells me that I should open the "Local Table Types" tab. However, I do not see where this tab is.
I get an SQLScript tab nothing else. Any hints?
Regards,
AndreasHi ,
Have a look on this discussion:
Table type creation via HS repository / CDS / DDl Source
Regards,
Krishna Tangudu -
GenIL model generation and Table types
When we run the GenIL model generation program, it generates ZMDL* structures for each Z* structures generated previously by SPROXY. But each element that is a Table type is skipped. So the GenIL model is incomplete and does not contain table elements.
For exemaple, assuming the existing Z_QUERY_ELMTS structure generated by SPROXY:
CONTROLLER Types PRXCTRLTAB
W_SYSTEM Types CHAR
SELECTION_BY_NIIN Types ZMATERIAL_BY_EL_QU_S_SEL_N_TAB
SELECTION_BY_PART_NUM Types ZMATERIAL_BY_EL_QU_S_SEL_P_TAB
DESCRIPTION Types ZSEARCH_TEXT STRING
EIAC Types ZEIACCODE STRING
the corresponding ZMDL structure is
WEAPON_SYSTEM Types CHAR2 CHAR
DESCRIPTION Types ZMDLSEARCH_TEXT STRING
EIAC Types ZMDLEIACCODE STRING
So every table type is skipped.
Is it a limitation of the product? Or a missing functionanliy?
Thanks in advance for your helpBy the way in the developer guide, it's also confusing:
- Creation of root object, p.47
Type Name: This is the data type which you retrieved above (ZSALES_ORDER_HEADER_DETAILS) u2013 the root attribute structure of the business object will be based on this structure. This structure has to completely define the attributes (payload) of your business object and typically matches with the response of the Read operation. Make sure this structure is u201Cflatu201D and does not contain any complex types or tables
- But p.51
Take a look at the attribute structure. It contains the list of all attributes of your business object derived from the structures of the server proxy. Also take a look a folder Relations, which contains relationships to dependent objects if your data structure is of a complex nature. In our example this folder is empty since the data structure is a flat one and therefore no relationship and no dependent object are required. -
How to populate internal table( varaible of ABAP table type) in Excel VBA?
Hi,
I am trying to update a database table from excel using a VBA Macro.
I am able to connect to SAP and able to read data from SAP using a RFC. Similarly after updating certain values, i want to update a table in SAP.
Below are the steps I am doing apart from basic settings.
Getting the reference of the SAP TABLE type from RFC fucntion module
' Call RFC
Set MyFunc = R3.Add("UPDATE_TVARVC_VIA_RFC")
' Get reference and Values TVARVC
Set oParam4 = MyFunc.Tables("TVARVC")
2. Loop over the active cells and populate oParam4
" add values as below
oParam4.Rows.Add
oParam4.Value(1, "NAME") = ..................
oParam4.Value(1, "TYPE") = ..................
oParam4.Value(1, "NUMB") = ..................
Do it for all columns in the table line.
My query is how to identify active cells and make the above code dynamic in step 2.
Thanks in Advance,
Best,
AneelHi Aneel,
You can try the following:
e.g.
for j = 1 to ActiveCell.SpecialCells(11).Column
oParam4.Rows.Add
if j=1 then oParam4.Value(j, "NAME") = ActiveSheet.Cells(1,j).Value
if j=2 then oParam4.Value(j, "TYPE") = ActiveSheet.Cells(1,j).Value
if j=3 then oParam4.Value(j, "NUMB") = ActiveSheet.Cells(1,j).Value
next j
Regards,
ScriptMan -
I am facing a strange SQL exception:-
The code flow is like this:
.Net 4.0 --> Entity Framework --> SQL 2008 ( StoredProc --> Function {Exception})
In the SQL Table-Valued Function, I am selecting a column (nvarchar(50)) from an existing table and (after some filtration using inner joins and where clauses) inserting the values in a Table Type Object having a column (nvarchar(50))
This flow was working fine in SQL 2008 but now all of sudden the Insert into @TableType is throwing "string or binary data would be truncated" exception.
Insert Into @ObjTableType
Select * From dbo.Table
The max length of data in the source column is 24 but even then the insert statement into nvarchar temp column is failing.
Moreover, the same issue started coming up few weeks back and I was unable to find the root cause, but back then it started working properly after few hours
(issue reported at 10 AM EST and was automatically resolved post 8 PM EST). No refresh activity was performed on the database.
This time however the issue is still coming up (even after 2 days) but is not coming up in every scenario. The data set, for which the error is thrown, is valid and every value in the function is fetched from existing tables.
Due to its sporadic nature, I am unable to recreate it now :( , but still unable to determine why it started coming up or how can i prevent such things to happen again.
It is difficult to even explain the weirdness of this bug but any help or guidance in finding the root cause will be very helpful.
I also Tried by using nvarchar(max) in the table type object but it didn't work.
Here is a code similar to the function which I am using:
BEGIN
TRAN
DECLARE @PID
int = 483
DECLARE @retExcludables
TABLE
PID
int NOT
NULL,
ENumber
nvarchar(50)
NOT NULL,
CNumber
nvarchar(50)
NOT NULL,
AId
uniqueidentifier NOT
NULL
declare @PSCount int;
select @PSCount =
count('x')
from tblProjSur ps
where ps.PID
= @PID;
if (@PSCount = 0)
begin
return;
end;
declare @ExcludableTempValue table (
PID
int,
ENumber
nvarchar(max),
CNumber
nvarchar(max),
AId
uniqueidentifier,
SIds
int,
SCSymb
nvarchar(10),
SurCSymb
nvarchar(10)
with SurCSymbs as (
select ps.PID,
ps.SIds,
csl.CSymb
from tblProjSur ps
right
outer join tblProjSurCSymb pscs
on pscs.tblProjSurId
= ps.tblProjSurId
inner join CSymbLookup csl
on csl.CSymbId
= pscs.CSymbId
where ps.PID
= @PID
AssignedValues
as (
select psr.PID,
psr.ENumber,
psr.CNumber,
psmd.MetaDataValue
as ClaimSymbol,
psau.UserId
as AId,
psus.SIds
from PSRow psr
inner join PSMetadata psmd
on psmd.PSRowId
= psr.SampleRowId
inner join MetaDataLookup mdl
on mdl.MetaDataId
= psmd.MetaDataId
inner join PSAUser psau
on psau.PSRowId
= psr.SampleRowId
inner
join PSUserSur psus
on psus.SampleAssignedUserId
= psau.ProjectSampleUserId
where psr.PID
= @PID
and mdl.MetaDataCommonName
= 'CorrectValue'
and psus.SIds
in (select
distinct SIds from SurCSymbs)
FullDetails
as (
select asurv.PID,
Convert(NVarchar(50),asurv.ENumber)
as ENumber,
Convert(NVarchar(50),asurv.CNumber)
as CNumber,
asurv.AId,
asurv.SIds,
asurv.CSymb
as SCSymb,
scs.CSymb
as SurCSymb
from AssignedValues asurv
left outer
join SurCSymbs scs
on scs.PID
= asurv.PID
and scs.SIds
= asurv.SIds
and scs.CSymb
= asurv.CSymb
--Error is thrown at this statement
insert into @ExcludableTempValue
select *
from FullDetails;
with SurHavingSym as (
select distinct est.PID,
est.ENumber,
est.CNumber,
est.AId
from @ExcludableTempValue est
where est.SurCSymb
is not
null
delete @ExcludableTempValue
from @ExcludableTempValue est
inner join SurHavingSym shs
on shs.PID
= est.PID
and shs.ENumber
= est.ENumber
and shs.CNumber
= est.CNumber
and shs.AId
= est.AId;
insert @retExcludables(PID, ENumber, CNumber, AId)
select distinct est.PID,
Convert(nvarchar(50),est.ENumber)
ENumber,
Convert(nvarchar(50),est.CNumber)
CNumber,
est.AId
from @ExcludableTempValue est
RETURN
ROLLBACK
TRAN
I have tried by converting the columns and also validated the input data set for any white spaces or special characters.
For the same input data, it was working fine till yesterday but suddenly it started throwing the exception.Remember, the CTE isn't executing the SQL exactly in the order you read it as a human (don't get too picky about that statement, it's at least partly true enough to say it's partly true), nor are the line numbers or error messages easy to read: a mismatch
in any of the joins along the way leading up to your insert could be the cause too. I would suggest posting the table definition/DDL for:
- PSMetadata, in particular PSRowID, but just post it all
- tblProjectSur, in particularcolumns CSymbID and TblProjSurSurID
- cSymbLookup, in particular column CSymbID
- PSRow, in particular columns SampleRowID, PID,
- PSAuser and PSUserSur, in particualr all the USERID and RowID columns
- SurCSymbs, in particular colum SIDs
Also, a diagnostic query along these lines, repeat for each of your tables, each of the columns used in joins leading up to your insert:
Select count(asurv.sid) as count all
, count(case when asurv.sid between 0 and 9999999999 then 1 else null end) as ctIsaNumber
from SurvCsymb
The sporadic nature would imply that the optimizer usually chooses one path to the data, but sometimes others, and the fact that it occurs during the insert could be irrelevant, any of the preceding joins could be the cause, not the data targeted to be inserted. -
Dont work 'REUSE_ALV_FIELDCATALOG_MERGE' with table type
Hi Experts ;
My problem about 'REUSE_ALV_FIELDCATALOG_MERGE' .
I use intarnal table with Table Type ( with header line ). And 'REUSE_ALV_FIELDCATALOG_MERGE' is not working . Field catalog is employ. I dont use 'REUSE_ALV_FIELDCATALOG_MERGE' have any problem.'REUSE_ALV_FIELDCATALOG_MERGE' expects a flat structure.
Give the reference of the line type of the table type if you wish to have fieldcatalog as per that..
Even if you dont use 'REUSE_ALV_FIELDCATALOG_MERGE' you can create your own Fieldcatalog..
Maybe you are looking for
-
1st requirement: Output of my report having two columns: First column's display will be like below: 2nd cell of first column will display the text: 'Total' 4th cell of first column will display the text: 'City Office' 6th cell of first column will d
-
I'm making a calculator on netbeans and so far i have been able to get the interface and an the function of the number buttons. Also I got the plus button to work but it does not work after using it once. I have tried, but im stuck and can't firgure
-
Interactive form, how to allow user use comment and markup tool?
hi, gurus, we are using CALL FUNCTION 'FP_JOB_OPEN' and CALL FUNCTION 'FP_JOB_close' together with the sfp funciton module to generate fillable pdf file, but we found out that the pdf generated does not allow user to use the comment and markup to
-
With safari 6 webpage suddenly dissapears
Hi, I am an user fron Buenos Aires and I've been experiencing the following problem wirh Safari 6. When I am in a webpage and I click on a link to go to another page within that same webpage, the page loads but, right after I move the cursor tp navig
-
"not known error system" saving metadata
very often, but no always, when I save metadata in the file, appear an "not known error system" message