Inserting multple rows - SQL help
I want to insert multiple rows of data into a table where most columns are the same between rows, but one changes. For example:
insert into fred (customer_id, val)
VALUES ( 1001, 1 )
insert into fred (customer_id, val)
VALUES ( 1001, 2 )
insert into fred (customer_id, val)
VALUES ( 1001, 3 )
insert into fred (customer_id, val)
VALUES ( 1001, 4 )
I was wondering if there is any syntax for doing this in a single SQL statement, perhaps using the IN keyword and (1,2,3,4)?
I know that I can write a stored procedure to do this, but was wondering if Oracle had any syntax to allows me to do this in a single SQL statement.
Hi Thomas,
Try this:
INSERT INTO fred (customer_id, val) SELECT 1001, ROWNUM FROM all_objects WHERE ROWNUM <=4;
This all_objects table should consists of more than the required number of records (for example more than 4 records in the above case), If you want to insert more records, just join the same table without join condition
Hope this works
Cheers!
r@m@
Similar Messages
-
SQL Help (Insert and Update)
I need to use a SQL command like MERGE that is in 9i; however, I am using 8.1.7 which MERGE does not exist. I want to update table "U" with a value if the key columns match with the key columns in table "E". If they do not match, I want to insert a row into table "U". How would the SQL statement be written??
The short answer is: use 2 SQL statements.
I've used the 2-statement approach many times. Its funny that I've waited, and waited for the MERGE command for years. Now that its available in 9i, I haven't had an opportunity to use it. However, considering how complicated the "upsert" operation can get, I'd bet that the MERGE command is pretty complicated...
First off, to save yourself headaches make sure you take care of duplicates in your source table (table E in Douglas' question).
Now, the 2-SQL's would look something like this:
update u
set (u.col1,
u.col2) =
(select e.col1,
e.col2
from e
where e.pk = u.pk)
where exists
(select 1
from e e2 /* notice alias e2 used for table e */
where e2.pk = u.pk)
insert into u
(pk, col1, col2)
select e.pk,
e.col1,
e.col2
from e
where not exists
(select 1
from u u2 /* notice alias u2 used for table u */
where u2.pk = e.pk)
--There are many variations on this scheme. One is to have a "status" column in the source table. When there are a small number of updates (or a small number of inserts), you can identify them and set a "status flag". Then take care of the small number of transactions (based on the flag). Now, you can delete the small number of rows and run a much simpler SQL for the majority of the rows.
Also, you may find it easier to use PL/SQL (as APC was mentioning). However, using the PL/SQL approach gets slower the more rows that are processed. An example might look something like:
begin
for c in (select * from e)
loop
update u
set col1 = c.col1,
col2 = c.col2
where e.pk = c.pk ;
if sql%rowcount = 0
then
insert into u
(pk, col1, col2) values (c.pk, c.col1, c.col2) ;
end if ;
end loop ;
commit ;
end ;
/Avoid this PL/SQL method if you have more than 10,000 rows. This "looping" approach can be optimized with "bulk-PL/SQL" available in Oracle 8i.
Typically, this PL/SQL approach is used when major non-SQL calculations must be done during the loading process...
HTH,
Stan -
Can not insert a row to a table from Oracle DBA Studio
Hi,
I try to use the Oracle DBA Studio to create a table and put some test data in it. Here is what I found:
I start Oracle DBA Studio on the client machine by connecting to an Oracle server 8i (8.1.7). I create a simple table called Test with two columns: one is USER, VARCHAR2, 10; and the other is USER2, CHAR, 2. After that, I right click on the table name and select "Table Data Editor" from the popup menu. The table editor window shows up. I type in the value 'AA' and 'BB' in the grid of two columns. Then I click the Apply button. An error message box popped up:
ORA-00928 missing SELECT keyword.
I click Show SQL button. The SQL statement is as following:
INSERT INTO "TASYS"."TEST" (USER ,USER2 ) VALUES ('AA' ,'BB').
I copy the statement to SQL Plus and run it. The same error is generated. But if I remove (USER, USER2) from the statement, it inserts a row without complaint. In other word, the database will not allow to insert if individual columns are list. I realize something must wrong with the new server and client installed and could not figure out what happening. Hope someone can help.
Thanks.
nullI am not sure, but could it be that USER is a keyword or predefine word. Check Oracle'slist of predefine/keyword
-
ODI - SCD Type 2 - Insert new row error
Hi All,
For Dimension I have a surrogate key, a natural key, and a column with "overwrite on change", start_date, end_date, current_record_ind. When I run the interface with the default SCD Type 2 for SQl server, this runs fine. But when I change that one column from "overwrite on change" to "insert new row", it fails on the update step. What should I be looking for anf fixing.
Thanks for your time and help.DB: SQL Server 2008.
IKM = IKM MSSQL Slowly Changing Dimension
Error Message: ODI-1228 - Incorrect syntax near the keyword from.
Code: update T
set
from database.dbo.Dim_type as T,
database.dbo.I$_Dim_type as S
where T.Cd = S.Cd
and T.Current_rec_ind = 1
and IND_UPDATE = 'U'
To overcome the issue, I have commented the update code in the Knowledge module and the insert works, but for this one it is ok, but I have requirements where one column needs to be overwritten and other column changes will require to add a new record. How to handle both?
Thanks for your time. -
How to insert multiple rows in a single insert statement in MaxDB?
hi,
I was looking at syntax but i could not get it right.. may be some could help me.
// Insert single row works fine
INSET INTO test_table(column_name) values (value1) IGNORE DUPLICATES
// Insert multiple rows, doesn't
INSET INTO test_table(column_name) values (value1), (value2), (value3) IGNORE DUPLICATES
Can somebody help me with this.
thanks,
sudhir.Multiple inserts do only work with parametrized statements, usually used in interfaces like JDBC, ODBC etc.
With static SQL statements it is not possible.
Regards Thomas -
how to insert a row in oracle if we have three colums all are number datatype i want one of the column blank;
Hi,
James has replied to your question ..
you seem to be new to sql
just adding to it for you information.. that in this case col2 will have NULL value.
I suggest you may please read the startup docs... They shall help you to unserdstand the sql better.
http://www.w3schools.com/sql/default.asp
Regards -
Mapping is done ....but it is not inserting any rows
hi,
Mapping is validated successfully.
We will deploy the code in the backend by generating the code.
When the package is created and executed It.It shows me procedure completed succesfully...But it will not insert any rows.
I am unable to find the reason for it.Please help me in solving this.
Thanks,
kiranwhat is your owb version
how many rows are there in source
what is your filter criteria and are any rows returned through simple sql but using that filter criteria.
what is the loading type of your target table
the ebst way is to debug the map and find out, i wouldnt recomment using backend code to debug as the ebst option since debug facility is availabe in owb, if that doesnt work then probably you can try using the package code.
Edited by: Darthvader-647181 on Nov 18, 2008 1:54 AM -
Insert one row with FileInputStream bigger than 30M always OutOfMemoryError
Hi,somebody can help me to solve my problem as follow:
The following file 'insertTest.jsp' run with Tomcat-5.0.18 and MySQL-4.0.17.
If I insert a row with a file bigger then 30M,I always get OutOfMemoryError messages shown as next.
In fact , I have adjusted variables as:
set-variable = max_allowed_packet=100M
set-variable = max_heap_table_size=100M
set-variable = tmp_table_size=100M
set-variable = key_buffer_size=100M
set-variable = innodb_buffer_pool_size=100M
set-variable = max_connections=200
set-variable = bulk_insert_buffer_size=100M
set-variable = sort_buffer_size=100M
set-variable = myisam_sort_buffer_size=100M
'insertTest.jsp' :
<%@ page language="java" contentType="text/html;charset=Big5" errorPage="" %>
<%@ page import="java.sql.*,java.io.*" %>
<%
Connection conn = null;
java.sql.Statement stmt = null;
String tableName="goodtable";
boolean tableNameExist=false;
String createtable = "Create table "+tableName+" (sn INT AUTO_INCREMENT NOT NULL PRIMARY KEY ,fileImage longblob)";
Class.forName("com.mysql.jdbc.Driver");
conn =DriverManager.getConnection("jdbc:mysql://thisIpAddress/thisDatabaseName?user=thisUser&password=thisPsw");
try {
DatabaseMetaData dbmd = conn.getMetaData();
String[] types = {"TABLE"};
ResultSet resultSet = dbmd.getTables(null, null, "%", types);
while (resultSet.next()) {
String tName = resultSet.getString(3);
if(tName.equals(tableName)){
tableNameExist=true;
break;
String tableCatalog = resultSet.getString(1);
String tableSchema = resultSet.getString(2);
catch (SQLException e) {}
out.print("<html><body bgcolor='#669999'>");
if(!tableNameExist){
stmt = conn.createStatement();
stmt.execute(createtable);
out.print("<p> <p><center>CreateTable="+tableName+" Ok!<hr>");
else
out.print("<p> <p><center>' "+tableName+" ' already exist!<hr>");
//The test file(at C:\fileSize30M.zip) is put here.
File file = new File("C:\\fileSize30M.zip");
FileInputStream fis = new FileInputStream(file);
String qry="Insert into "+tableName+"(fileImage) values(?)";
java.sql.PreparedStatement pstmt=conn.prepareStatement(qry);
pstmt.setBinaryStream(1,fis,fis.available());
out.print("'before pstmt.executeUpdate()' is ok<p>");
System.out.println("'before pstmt.executeUpdate()' is ok<p>");
int ok=pstmt.executeUpdate();
if(ok==1){
out.print("'after pstmt.executeUpdate()' is ok");
System.out.println("'after pstmt.executeUpdate()' is ok<p>");
fis.close();
pstmt.close();
conn.close();
out.print("</body></html>");
%>
type: Exception report
description: The server encountered an internal error () that prevented it from fulfilling this request.
exception :
javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
org.apache.jsp.insertTest_jsp._jspService(insertTest_jsp.java:101)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause :
java.lang.OutOfMemoryErrorIncrease you heap size on Tomcat startup. I haven't used Tomcat in some years but I think you can just set a JAVA_OPTS environment variable with the text Xmx128M and your problems will go away. I'm thinking this is an issue because I'm assuming you are running Tomcat on a Windows box where the default heap for Java is relatively small like 32M or 64M or something like that.
Cliff -
The codes below allow me to insert a row of record into the database. How would I changed these to insert multiple rows at once? Please help!
String sql = "INSERT INTO EMPLOYEES" +
"(First_Name, Last_Name, Title, Phone) " +
" VALUES " +
PreparedStatement statement = conn.prepareStatement(sql);
statement.setObject (1, First_Name);
statement.setObject (2, Last_Name);
statement.setObject (3, Title);
statement.setObject (4, Phone);
boolean returnValue = statement.execute();You can either create a loop and repeat the insert statement,
or use the addBatch() and executeBatch() methods in the
java.sql.Statement class. -
Insert multiple rows of records into the database
The codes below allow me to insert a row of record into the database. How would I changed these to insert multiple rows at once? Please help!
String sql = "INSERT INTO EMPLOYEES" +
"(First_Name, Last_Name, Title, Phone) " +
" VALUES " +
PreparedStatement statement = conn.prepareStatement(sql);
statement.setObject (1, First_Name);
statement.setObject (2, Last_Name);
statement.setObject (3, Title);
statement.setObject (4, Phone);
boolean returnValue = statement.execute();Hi mystiqueX,
As wmolosho has suggested in his answer to this very same question that you also posted to the JavaServer Pages forum, you can create a batch of inserts and perform them using the "executeBatch()" method. I will use Craig's sample code to demonstrate:
(Note that this code is untested!)
conn.setAutoCommit(false);
PreparedStatement statement = conn.prepareStatement(sql);
// assume you have an array of objects here
for (int i = 0; i < data.length; i++) {
statement.setString(1, data<i>.getFirstName());
statement.setString(2, data<i>.getLastName());
statement.setString(3, data<i>.getTitle());
statement.setString(4, data<i>.getPhone());
statement.addBatch();
statement.executeBatch();
conn.commit();If you are not familiar with it, allow me to suggest looking at the Making Batch Updates lesson on the Java Tutorial.
Hope it helps.
Good Luck,
Avi. -
Inserting multiple rows with single insert statement ?
Hi ,,
Consider a PL/SQL procedure.
I want to pass an array of values and insert in a table with a single statement.
Moreover I want to call this procedure to insert multiple rows from OCI program.
Can some body help ? :(
Thanks
ChanduHi Vincent,
Regular array insert which you have mentioned works in case of insert statement(This is to eliminate multiple calls to server)
Will it work for passing array to Stored procedure, in this case procedure will be called only once with an array.
It will be of great help if you give an example.
Thanks
Chandra -
How to insert a row in UDO of type document with document line using DIAPI
Does somebody knows if there is a way to insert a new row in a UDO of type document and document lines using the DI API?
I tried it by using <i>oCompany.UserTables.Item( "PMX_DOC" )</i> but this was not working.
Thanks for the help.
Regards,
JeffreyWe have to insert the row in a server process so it is not possible to use the UIAPI.
I wanted to do it by writing SQL statements to do the insert/update/deletes but it seems that we are not allowed to do this if you want to certify your addon. Does somebody knows how we can get an addon certified but also updating our own UDO using DIAPI?
Thanks.
Regards,
Jeffrey -
ODBC, bulk inserts and dynamic SQL
I am writing an application running on Windows NT 4 and using the oracle ODBC driver (8.01.05.00, that inserts many rows at a time (10000+) into an oracle 8i database.
At present, I am using a stored procedure to insert each row into the database. The stored procedure uses dynamic SQL because I can only determine the table and field names at run time.
Due to the large number of records, it tends to take a while to perform all the inserts. I have tried a number of solutions such as using batches of SQL statements (e.g. "INSERT...;INSERT...;INSERT..."), but the oracle ODBC driver only seems act on the first statement in the batch.
I have also considered using the FOR ALL statement and SQL*Loader utility.
My problem with FOR ALL is that I'm not sure it works on dynamic SQL statements and even if it did, how do I pass an array of statements to the stored procedure.
I ruled out SQL* Loader because I could not find a way to invoke it it from an ODBC statement. Secondly, it requires the spawining of a new process.
What I am really after is something similar the the SQL Server (forgive me!) BULK INSERT statement where you can simply create an input file with all the records you want to insert, and pass it along in an ODBC statement such as "BULK INSERT <filename>".
Any ideas??
nullHi,
I faced this same situation years ago (Oracle 7.2!) and had the following alternatives.
1) Use a 3rd party tool such as Sagent or CA Info pump (very pricey $$$)
2) Use VisualC++ and OCI to hook into the array insert routines (there are examples of these in the Oracle Home).
3) Use SQL*Loader (the best performance, but no real control of what's happening).
I ended up using (2) and used the Rouge Wave dbtools.h++ library to speed up the development.
These days, I would also suggest you take a look at Perl on NT (www.activestate.com) and the DBlib modules at www.perl.org. I believe they will also do bulk loading.
Your problem is that your program is using Oracle ODBC, when you should be using Oracle OCI for best performance.
null -
I am writing an application running on Windows NT 4 and using the oracle ODBC driver (8.01.05.00, that inserts many rows at a time (10000+) into an oracle 8i database.
At present, I am using a stored procedure to insert each row into the database. The stored procedure uses dynamic SQL because I can only determine the table and field names at run time.
Due to the large number of records, it tends to take a while to perform all the inserts. I have tried a number of solutions such as using batches of SQL statements (e.g. "INSERT...;INSERT...;INSERT..."), but the oracle ODBC driver only seems act on the first statement in the batch.
I have also considered using the FOR ALL statement and SQL*Loader utility.
My problem with FOR ALL is that I'm not sure it works on dynamic SQL statements and even if it did, how do I pass an array of statements to the stored procedure.
I ruled out SQL* Loader because I could not find a way to invoke it it from an ODBC statement. Secondly, it requires the spawining of a new process.
What I am really after is something similar the the SQL Server (forgive me!) BULK INSERT statement where you can simply create an input file with all the records you want to insert, and pass it along in an ODBC statement such as "BULK INSERT <filename>".
Any ideas??
nullHi,
I faced this same situation years ago (Oracle 7.2!) and had the following alternatives.
1) Use a 3rd party tool such as Sagent or CA Info pump (very pricey $$$)
2) Use VisualC++ and OCI to hook into the array insert routines (there are examples of these in the Oracle Home).
3) Use SQL*Loader (the best performance, but no real control of what's happening).
I ended up using (2) and used the Rouge Wave dbtools.h++ library to speed up the development.
These days, I would also suggest you take a look at Perl on NT (www.activestate.com) and the DBlib modules at www.perl.org. I believe they will also do bulk loading.
Your problem is that your program is using Oracle ODBC, when you should be using Oracle OCI for best performance.
null -
Hi ,
I need to insert a row in ALV output. On click of a Inser Row button a pop up should show with a parameter.Once the value in entered in the parameter enter is hit , the first column of the new row should have value put in that parameter as non editable field.
The Insert row of standard toolbar inserts a blank row . Is there any way to incorporate the above logic in the standard toolbar?
I'm using CL_GUI_ALV_GRID to display the ALV.
It would be helpful if you provide sample coding.
Thanks.
Ajith
Edited by: Ajith Krishna on Oct 28, 2008 8:01 PMHello Ajith
The enhanced version of sample report ZUS_SDN_ALVGRID_EDITABLE_8A demonstrates how to implement your requirement.
*& ZUS_SDN_ALVGRID_EDITABLE_8A
*& Thread: Insert a row in ALV
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1105097"></a>
*& Thread: Blanking values on ALV Grid Row Duplicate
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1057161"></a>
*& Thread: Delete line event in ALV
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="945471"></a>
REPORT zus_sdn_alvgrid_editable_8a.
TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE knb1.
TYPES: END OF ty_s_outtab.
TYPES: ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab
WITH DEFAULT KEY.
DATA:
gd_okcode TYPE ui_func,
gd_repid TYPE syst-repid,
gt_fcat TYPE lvc_t_fcat,
go_docking TYPE REF TO cl_gui_docking_container,
go_grid TYPE REF TO cl_gui_alv_grid.
DATA:
gt_outtab TYPE ty_t_outtab.
* CLASS lcl_eventhandler DEFINITION
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
mt_sel_rows TYPE lvc_t_row.
CLASS-METHODS:
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object
sender,
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING
e_ucomm
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
* CLASS lcl_eventhandler IMPLEMENTATION
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_toolbar.
* define local data
DATA: ls_button TYPE stb_button.
LOOP AT e_object->mt_toolbar INTO ls_button.
CASE ls_button-function.
when cl_gui_alv_grid=>MC_FC_LOC_INSERT_ROW.
ls_button-function = 'INSERT_ROW'.
MODIFY e_object->mt_toolbar FROM ls_button INDEX syst-tabix.
WHEN cl_gui_alv_grid=>mc_fc_loc_delete_row.
ls_button-function = 'DELETE_ROW'.
MODIFY e_object->mt_toolbar FROM ls_button INDEX syst-tabix.
WHEN cl_gui_alv_grid=>mc_fc_loc_copy_row OR
cl_gui_alv_grid=>mc_fc_loc_copy.
ls_button-function = 'COPY_ROW'.
MODIFY e_object->mt_toolbar FROM ls_button INDEX syst-tabix.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ENDLOOP.
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
* define local data
DATA: lt_rows TYPE lvc_t_row,
ls_row TYPE lvc_s_row.
REFRESH: mt_sel_rows.
CASE e_ucomm.
when 'INSERT_ROW'.
WHEN 'DELETE_ROW'.
WHEN 'COPY_ROW'.
WHEN OTHERS.
RETURN.
ENDCASE.
" User wants to delete or copy rows => store them in class attribute
" and trigger PAI afterwards where we actually delete /copy the rows
" and do the recalculations (in case of deletion)
CALL METHOD sender->get_selected_rows
IMPORTING
et_index_rows = mt_sel_rows
* et_row_no =
* Trigger PAI
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = e_ucomm
* IMPORTING
* rc =
ENDMETHOD. "user_command
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
PARAMETERS:
p_bukrs TYPE bukrs DEFAULT '2000' OBLIGATORY.
START-OF-SELECTION.
SELECT * FROM knb1 INTO CORRESPONDING FIELDS OF TABLE gt_outtab
UP TO 15 ROWS
WHERE bukrs = p_bukrs.
PERFORM init_controls.
SET HANDLER:
lcl_eventhandler=>handle_toolbar FOR go_grid,
lcl_eventhandler=>handle_user_command FOR go_grid.
" Used to replace standard toolbar function code with custom FC
go_grid->set_toolbar_interactive( ).
* Link the docking container to the target dynpro
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* ok-code field = GD_OKCODE
CALL SCREEN '0100'.
END-OF-SELECTION.
*& Module STATUS_0100 OUTPUT
* text
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
* SET TITLEBAR 'xxx'.
** CALL METHOD go_grid1->refresh_table_display
*** EXPORTING
*** IS_STABLE =
*** I_SOFT_REFRESH =
** EXCEPTIONS
** FINISHED = 1
** others = 2
** IF sy-subrc <> 0.
*** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
** ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0100 INPUT
* text
MODULE user_command_0100 INPUT.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
WHEN 'INSERT_ROW'.
perform INSERT_ROW.
WHEN 'DELETE_ROW'.
PERFORM delete_rows.
WHEN 'COPY_ROW'.
PERFORM copy_rows.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
CALL METHOD go_grid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Form BUILD_FIELDCATALOG_KNB1
* text
* --> p1 text
* <-- p2 text
FORM build_fieldcatalog_knb1 .
* define local data
DATA:
ls_fcat TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = 'KNB1'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
ct_fieldcat = gt_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Only non-key fields are editable
ls_fcat-edit = 'X'.
MODIFY gt_fcat FROM ls_fcat
TRANSPORTING edit
WHERE ( key NE 'X' ).
ENDFORM. " BUILD_FIELDCATALOG_KNB1
*& Form INIT_CONTROLS
* text
* --> p1 text
* <-- p2 text
FORM init_controls .
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Create ALV grid
CREATE OBJECT go_grid
EXPORTING
i_parent = go_docking
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Build fieldcatalog and set hotspot for field KUNNR
PERFORM build_fieldcatalog_knb1.
* Display data
CALL METHOD go_grid->set_table_for_first_display
CHANGING
it_outtab = gt_outtab
it_fieldcatalog = gt_fcat
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " INIT_CONTROLS
*& Form delete_rows
* text
* --> p1 text
* <-- p2 text
FORM delete_rows .
* define local data
DATA: ls_row TYPE lvc_s_row.
SORT lcl_eventhandler=>mt_sel_rows BY index DESCENDING. " !!!
LOOP AT lcl_eventhandler=>mt_sel_rows INTO ls_row.
DELETE gt_outtab INDEX ls_row-index.
ENDLOOP.
" After deleting rows do RE-CALCULATION
* perform RECALCULATION.
ENDFORM. " delete_rows
*& Form COPY_ROWS
* text
* --> p1 text
* <-- p2 text
FORM copy_rows .
* define local data
DATA: ld_next TYPE i,
ls_row TYPE lvc_s_row,
ls_outtab TYPE ty_s_outtab.
SORT lcl_eventhandler=>mt_sel_rows BY index DESCENDING. " !!!
LOOP AT lcl_eventhandler=>mt_sel_rows INTO ls_row.
READ TABLE gt_outtab INTO ls_outtab INDEX ls_row-index.
CLEAR: ls_outtab-akont. " In your case: clear GUID
ld_next = ls_row-index + 1.
INSERT ls_outtab INTO gt_outtab INDEX ld_next.
ENDLOOP.
ENDFORM. " COPY_ROWS
*& Form INSERT_ROW
* text
* --> p1 text
* <-- p2 text
form INSERT_ROW .
* define local data
DATA: ld_value1 type SPOP-VARVALUE1,
ls_outtab TYPE ty_s_outtab.
CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'
EXPORTING
textline1 = 'Enter Value (4 Chars):'
* TEXTLINE2 = ' '
* TEXTLINE3 = ' '
titel = 'Enter Value'
valuelength = 4
IMPORTING
* ANSWER =
VALUE1 = ld_value1
EXCEPTIONS
TITEL_TOO_LONG = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ls_outtab-kunnr = ld_value1.
ls_outtab-bukrs = ld_value1.
append ls_outtab to gt_outtab.
endform. " INSERT_ROW
Regards
Uwe
Maybe you are looking for
-
Monitor Is Flickering - ATI Display Driver Problem Error Message
Hello, for the last few weeks, I have been having a monitor issue. Everytime I turn my computer and monitor on, it is flickering like crazy on my HP 2509B Desktop Monitor, and on the right bottom corner a flag shows up with ATI Display driver, and I
-
Background tile turns grainy after saving
I'm trying to make a background tile with a texture in it. I'm probably missing a step somewhere but here is what I'm doing: Open up a new documement 200 pixels square Select the square with vector selection tool (this may be the wrong step but I can
-
Hello,Is it possible to retrieve a projects list with the collaboration API from only one information: the project folder where are stored these projects ? I parsed the API collaboration reference manual. And I don't find any function allowing me to
-
K7N2 D-ILSR over Abit's NF7-S? Convince me!
Okay, the title pretty well sums it up. My heart's been set on the Delta-ILSR for the last several months but now that the time's come for me to buy I've had to stop & reconsider. I've been going thru forums & reviews left & right the last few days a
-
I have 5 tabs (UITabViewController), and for one of the tabs I want to have 2 subviews, one view as the default, then when I press a button the view flips to the other view. I have the Tab View working just fine, and in a separate project I can get t