我试图创建一个方法来插入数据到数据库,但它不工作。我试图通过使用add_person
插入数据。这是我的代码。透明表名称为ZPERSON_20
。
CLASS lcl_person DEFINITION.
PUBLIC SECTION.
METHODS:
add_person
IMPORTING
im_id TYPE zperson_20-person_id
im_name TYPE zperson_20-person_name
im_add TYPE zperson_20-person_address
im_type TYPE zperson_20-person_type.
PRIVATE SECTION.
DATA:
c_id TYPE zperson_20-person_id,
c_name TYPE zperson_20-person_name,
c_add TYPE zperson_20-person_address,
c_type TYPE zperson_20-person_type.
ENDCLASS.
CLASS lcl_person IMPLEMENTATION.
METHOD add_person.
DATA: it_emp TYPE STANDARD TABLE OF zperson_20.
DATA: wa_emp LIKE LINE OF it_emp.
wa_emp-person_id = c_id.
wa_emp-person_name = c_name.
wa_emp-person_add = c_add.
wa_emp-person_type = c_type.
INSERT INTO zperson_20 VALUES wa_emp.
ENDMETHOD.
ENDCLASS.
PARAMETERS:
v_id TYPE zperson_20-person_id,
v_name TYPE zperson_20-person_name,
v_add TYPE zperson_20-person_address,
v_type TYPE zperson_20-person_type.
DATA: lv_ref_person TYPE REF TO lcl_person.
START-OF-SELECTION.
CREATE OBJECT lv_ref_person.
CALL METHOD lv_ref_person->add_person(
im_id = v_id
im_name = v_name
im_add = v_add
im_type = v_type
).
我会说您的问题是add_person方法内部,因为您正在读取成员变量的值,而不是方法参数。在这种情况下,这些成员变量可能是空的,从而导致由于id为空或重复而导致插入错误。
我相信你想要实现的代码如下:
REPORT ZRKD_BASE_WSLOADER.
CLASS lcl_person DEFINITION.
PUBLIC SECTION.
METHODS:
add_person
IMPORTING
im_id TYPE zperson_20-person_id
im_name TYPE zperson_20-person_name
im_add TYPE zperson_20-person_address
im_type TYPE zperson_20-person_type.
ENDCLASS.
CLASS lcl_person IMPLEMENTATION.
METHOD add_person.
DATA: wa_emp TYPE zperson_20.
//----> Here are the modifications <-------
wa_emp-person_id = im_id.
wa_emp-person_name = im_name.
wa_emp-person_address = im_add.
wa_emp-person_type = im_type.
INSERT INTO zperson_20 VALUES wa_emp.
ENDMETHOD.
ENDCLASS.
PARAMETERS:
v_id TYPE zperson_20-person_id,
v_name TYPE zperson_20-person_name,
v_add TYPE zperson_20-person_address,
v_type TYPE zperson_20-person_type.
DATA: lv_ref_person TYPE REF TO lcl_person.
START-OF-SELECTION.
CREATE OBJECT lv_ref_person.
CALL METHOD lv_ref_person->add_person(
im_id = v_id
im_name = v_name
im_add = v_add
im_type = v_type
).
将足以创建一个提交方法,然后调用该方法,如果您确实确定要在db上保存,或者将此参数添加为添加人员的标志。如果设置了,则提交事务。这个操作的指令是"提交工作",它在整个代码片段中都没有。如果没有它,任何东西都不会从实际的LUW提交缓冲区移动到db.
你的方法add_person被定义为不接受参数,你正在传递参数给它。基本上在叫法和定义上存在分歧。
你能把整个代码贴在这里吗?