Example Program: A Simple Query
Computer_IT/C++2006. 8. 7. 13:35
반응형
- /*
- * sample1.pc
- *
- * Prompts the user for an employee number,
- * then queries the emp table for the employee's
- * name, salary and commission. Uses indicator
- * variables (in an indicator struct) to determine
- * if the commission is NULL.
- *
- */
- #include <stdio.h>
- #include <string.h>
- /* Define constants for VARCHAR lengths. */
- #define UNAME_LEN 20
- #define PWD_LEN 40
- /* Declare variables.No declare section is needed if MODE=ORACLE.*/
- VARCHAR username[UNAME_LEN];
- /* VARCHAR is an Oracle-supplied struct */
- varchar password[PWD_LEN];
- /* varchar can be in lower case also. */
- /*
- Define a host structure for the output values of a SELECT statement.
- */
- struct {
- VARCHAR emp_name[UNAME_LEN];
- float salary;
- float commission;
- } emprec;
- /*
- Define an indicator struct to correspond to the host output struct. */
- struct
- {
- short emp_name_ind;
- short sal_ind;
- short comm_ind;
- } emprec_ind;
- /* Input host variable. */
- int emp_number;
- int total_queried;
- /* Include the SQL Communications Area.
- You can use #include or EXEC SQL INCLUDE. */
- #include <sqlca.h>
- /* Declare error handling function. */
- void sql_error();
- main()
- {
- char temp_char[32];
- /* Connect to ORACLE--
- * Copy the username into the VARCHAR.
- */
- strncpy((char *) username.arr, "SCOTT", UNAME_LEN);
- /* Set the length component of the VARCHAR. */
- username.len = strlen((char *) username.arr);
- /* Copy the password. */
- strncpy((char *) password.arr, "TIGER", PWD_LEN);
- password.len = strlen((char *) password.arr);
- /* Register sql_error() as the error handler. */
- EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
- /* Connect to ORACLE. Program will call sql_error()
- * if an error occurs when connecting to the default database.
- */
- EXEC SQL CONNECT :username IDENTIFIED BY :password;
- /* Loop, selecting individual employee's results */
- total_queried = 0;
- for (;;)
- {
- /* Break out of the inner loop when a
- * 1403 ("No data found") condition occurs.
- */
- EXEC SQL WHENEVER NOT FOUND DO break;
- for (;;)
- {
- emp_number = 0;
- gets(temp_char);
- emp_number = atoi(temp_char);
- if (emp_number == 0)
- break;
- EXEC SQL SELECT ename, sal, NVL(comm, 0)
- INTO :emprec INDICATOR :emprec_ind
- FROM EMP
- WHERE EMPNO = :emp_number;
- /* Print data. */
- /* Null-terminate the output string data. */
- emprec.emp_name.arr[emprec.emp_name.len] = '\0';
- emprec.emp_name.arr, emprec.salary);
- if (emprec_ind.comm_ind == -1)
- else
- total_queried++;
- } /* end inner for (;;) */
- if (emp_number == 0) break;
- } /* end outer for(;;) */
- /* Disconnect from ORACLE. */
- EXEC SQL COMMIT WORK RELEASE;
- exit(0);
- }
- void sql_error(msg)
- char *msg;
- {
- char err_msg[128];
- int buf_len, msg_len;
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- buf_len = sizeof (err_msg);
- sqlglm(err_msg, &buf_len, &msg_len);
- EXEC SQL ROLLBACK RELEASE;
- exit(1);
- }
반응형
'Computer_IT > C++' 카테고리의 다른 글
[VC] 인라인 ASM 으로 작성한 연산 (1) | 2006.08.14 |
---|---|
[VC] MMX support 여부 (0) | 2006.08.14 |
Const Member변수 초기화 특성 (0) | 2006.04.24 |
LinkedList 자료 (0) | 2006.04.06 |
VC++ 단축키 모음 (2) | 2006.03.19 |