»ç¿ëÀÚ ¾È³» ¹× ÂüÁ¶¼­

ST_InteriorRingN

´Ù°¢ÇüÀÇ n¹øÂ° ³»ºÎ ¸µÀ» ¼±½ºÆ®¸µÀ¸·Î¼­ ¸®ÅÏÇÕ´Ï´Ù. ¸µÀº ±âÇÏÇÐ ¹æÇâ¿¡ ÀÇÇØ ±¸¼ºµÇÁö ¾Ê½À´Ï´Ù. ¸µÀº ³»ºÎ ±âÇÏÇÐ °ËÁõ ·çƾ¿¡ ÀÇÇØ Á¤ÀÇµÈ ±ÔÄ¢¿¡ µû¶ó ±¸¼ºµË´Ï´Ù. ±×·¯¹Ç·Î ¸µÀÇ ¼ø¼­´Â »çÀü Á¤ÀÇÇÒ ¼ö ¾ø½À´Ï´Ù.

±¸¹®

ST_InteriorRingN(p ST_Polygon, n Integer)

¸®ÅÏ À¯Çü

db2gse.ST_LineString

¿¹

¿©·¯ ³²ÇØ ¼¶¿¡ »ç´Â Á¶·ù Áý´ÜÀ» ¿¬±¸ÇÏ´Â Á¶·ùÇÐÀÚ´Â ¼öµ¿ÀûÀΠƯÁ¤ Á¶·ùÁ¾ÀÇ »ýÅ ±¸¿ªÀÌ ÇØ¾È¼±¿¡ Á¦ÇѵǾî ÀÖÀ½À» ¾Ë°í ÀÖ½À´Ï´Ù. ÀϺΠ¼¶¿¡´Â ¿©·¯ °³ÀÇ È£¼ö°¡ ÀÖ½À´Ï´Ù. È£¼öÀÇ ÇØ¾È¼±Àº º¸´Ù °ø°ÝÀûÀÎ ´Ù¸¥ Á¶·ù Á¾ÀÌ µ¶Á¡ÀûÀ¸·Î ¼­½ÄÇϰí ÀÖ½À´Ï´Ù. »ýÅÂÇÐÀÚ´Â °¢ ¼¶ÀÇ °æ¿ì¿¡ È£¼öÀÇ ÁÖ°è°¡ ƯÁ¤ ÀÓ°è°ªÀ» ÃʰúÇÏ¸é °ø°ÝÀûÀÎ Á¶·ùÁ¾ÀÌ ³Ê¹« ¸¹¾ÆÁ®¼­ ¼öµ¿ÀûÀÎ ¼¶ ÇØ¾È¼± Á¶·ùÁ¾À» À§ÇùÇÒ °ÍÀÓÀ» ¾Ë°í ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î, Á¶·ùÇÐÀÚ¿¡°Ô´Â ¼¶ÀÇ ÃÑ ³»ºÎ µÑ·¹°¡ ÇÊ¿äÇÕ´Ï´Ù.


±×¸² 34¿¡¼­ ¼¶ÀÇ ¿ÜºÎ ¸µÀº °¢°¢ÀÇ ¼¶ÀÌ ¹Ù´Ù¿Í °øÀ¯ÇÏ´Â »ýÅÂÇÐÀû ÀÎÅÍÆäÀ̽º¸¦ ³ªÅ¸³À´Ï´Ù. ÀϺΠ¼¶¿¡´Â ´Ù°¢ÇüÀÇ ³»ºÎ ¸µÀ¸·Î Ç¥ÇöµÇ´Â È£¼ö°¡ ÀÖ½À´Ï´Ù.

±×¸² 34. ST_InteriorRingNÀ» »ç¿ëÇÏ¿© °¢ ¼¶¿¡ Àִ ȣ¼ö ÇØ¾È¼±ÀÇ ±æÀ̸¦ ÆÇº°

¸Ç À§

ISLANDS Å×À̺íÀÇ ID ¹× À̸§ Ä÷³Àº °¢ ¼¶À» ³ªÅ¸³»¸ç ¼¶ ´Ù°¢Çü Ä÷³Àº ¼¶ÀÇ ±âÇÏÇÐÀ» ÀúÀåÇÕ´Ï´Ù.

CREATE TABLE ISLANDS (id    integer,
                      name  varchar(32),
                      land  db2gse.ST_Polygon); 

´ÙÀ½ÀÇ ODBC ÇÁ·Î±×·¥¿¡¼­´Â ST_InteriorRingN ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© °¢ ¼¶ ´Ù°¢Çü¿¡¼­ ³»ºÎ ¸µ(È£¼ö)À» ¼±½ºÆ®¸µÀ¸·Î¼­ ¹ßÃéÇÕ´Ï´Ù. ±æÀÌ ÇÔ¼ö¿¡ ÀÇÇØ ¸®ÅϵǴ ¼±½ºÆ®¸µÀÇ Áְ踦 ¸ðµÎ ÇÕÇØ ¼¶ÀÇ ID¿Í ÇÔ²² Ç¥½ÃÇÕ´Ï´Ù.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#include "sg.h"
#include "sgerr.h"
#include "sqlcli1.h"
 
/***                        ***
 *** »ó¼ö º¯°æ ***
 ***                        ***/
 
#define USER_NAME   "sdetest"   /* »ç¿ëÀÚ À̸§ */
#define USER_PASS   "acid.rain" /* »ç¿ëÀÚ ¾ÏÈ£ */
#define DB_NAME     "mydb"      /* ¿¬°áÇÒ µ¥ÀÌÅͺ£À̽º */
 
static void check_sql_err (SQLHDBC  handle,
                           SQLHSTMT hstmt,
  LONG          rc,
                           CHAR     *str);
 
void main( argc, argv )
int argc;
char *argv[];
{
  SQLHDBC       handle;
  SQLHENV       henv;
  CHAR          sql_stmt[256];
  LONG          rc,
                total_perimeter,
                num_lakes,
                lake_number,
                island_id,
                lake_perimeter;
  SQLHSTMT      island_cursor,
                lake_cursor;
  SDWORD        pcbvalue,
                id_ind,
                lake_ind,
                length_ind;
 
/* ODBC ȯ°æ ÇÚµé henv¿¡ ´ëÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí, ÀÀ¿ëÇÁ·Î±×·¥À»
ÃʱâÈ­ÇÕ´Ï´Ù. */
 
  rc = SQLAllocEnv (&henv);
  if (rc != SQL_SUCCESS)
  {
    printf ("SQLAllocEnv failed with %d\n", rc);
    exit(0);
  }
 
/* henv ȯ°æ ³»¿¡ ¿¬°á Çڵ鿡 ´ëÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÕ´Ï´Ù. */
 
  rc = SQLAllocConnect (henv, &handle);
  if (rc != SQL_SUCCESS)
  {
    printf ("SQLAllocConnect failed with %d\n", rc);
    exit(0);
  }
 
/* ODBC µå¶óÀ̹ö¸¦ ·ÎµåÇÏ°í µ¥ÀÌÅͺ£À̽º, »ç¿ëÀÚ ¹× ¾ÏÈ£¿¡ ÀÇÇØ ½Äº°µÇ´Â
   µ¥ÀÌÅÍ ¼Ò½º¿¡ ¿¬°áÇÕ´Ï´Ù.*/
 
  rc = SQLConnect (handle,
                   (UCHAR *)DB_NAME,
                   SQL_NTS,
                   (UCHAR *)USER_NAME,
                   SQL_NTS,
                   (UCHAR *)USER_PASS,
                   SQL_NTS);
 
  check_sql_err (handle, NULL, rc, "SQLConnect");
 
/* ¸Þ¸ð¸®¸¦ SQL¹® ÇÚµé island_cursor¿¡ ÇÒ´çÇÕ´Ï´Ù. */
 
  rc = SQLAllocStmt (handle, &island_cursor);
  check_sql_err (handle, NULL, rc, "SQLAllocStmt");
 
/* island ID ¹× lakes(³»ºÎ ¸µ) ¼ö¸¦ ¾ò±â À§ÇÑ Á¶È¸¸¦
   Áغñ ¹× ½ÇÇàÇÕ´Ï´Ù. */
 
  strcpy (sql_stmt, "select id, db2gse.ST_NumInteriorRings(land) from ISLANDS");
 
  rc = SQLExecDirect (island_cursor, (UCHAR *)sql_stmt, SQL_NTS);
  check_sql_err (NULL, island_cursor, rc, "SQLExecDirect");
 
/* island Å×À̺íÀÇ ID Ä÷³À» º¯¼ö island_id¿¡ ¹ÙÀεåÇÕ´Ï´Ù. */
 
  rc = SQLBindCol (island_cursor, 1, SQL_C_SLONG, &island_id, 0, &id_ind);
  check_sql_err (NULL, island_cursor, rc, "SQLBindCol");
 
/* numinteriorrings(land)ÀÇ °á°ú¸¦ num_lakes º¯¼ö¿¡ ¹ÙÀεåÇÕ´Ï´Ù. */
 
  rc = SQLBindCol (island_cursor, 2, SQL_C_SLONG, &num_lakes, 0, &lake_ind);
  check_sql_err (NULL, island_cursor, rc, "SQLBindCol");
 
/* SQL¹® ÇÚµé lake_cursor¿¡ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÕ´Ï´Ù. */
 
rc = SQLAllocStmt (handle, &lake_cursor);
  check_sql_err (handle, NULL, rc, "SQLAllocStmt");
 
/* ³»ºÎ ¸µÀÇ ±æÀ̸¦ °¡Á®¿À±â À§ÇÑ Á¶È¸¸¦ ÁغñÇÕ´Ï´Ù. */
 
  strcpy (sql_stmt,
          "select Length(db2gse.ST_InteriorRingN(land, cast (? as
           integer))) from ISLANDS where id = ?");
 
  rc = SQLPrepare (lake_cursor, (UCHAR *)sql_stmt, SQL_NTS);
  check_sql_err (NULL, lake_cursor, rc, "SQLPrepare");
 
/* lake_number º¯¼ö¸¦ ù¹øÂ° ÀÔ·Â ¸Å°³º¯¼ö·Î¼­ ¹ÙÀεåÇÕ´Ï´Ù. */
 
  pcbvalue = 0;
  rc = SQLBindParameter (lake_cursor, 1, SQL_PARAM_INPUT, SQL_C_LONG,
       SQL_INTEGER, 0, 0, &lake_number, 0, &pcbvalue);
  check_sql_err (NULL, lake_cursor, rc, "SQLBindParameter");
 
/* island_id¸¦ µÎ ¹øÂ° ÀÔ·Â ¸Å°³º¯¼ö·Î¼­ ¹ÙÀεåÇÕ´Ï´Ù. */
 
  pcbvalue = 0;
  rc = SQLBindParameter (lake_cursor, 2, SQL_PARAM_INPUT, SQL_C_LONG,
       SQL_INTEGER, 0, 0, &island_id, 0, &pcbvalue);
  check_sql_err (NULL, lake_cursor, rc, "SQLBindParameter");
 
/* Length(db2gse.ST_InteriorRingN(land, cast
  (? as integer)))ÀÇ °á°ú¸¦ lake_perimeter º¯¼ö¿¡ ¹ÙÀεåÇÕ´Ï´Ù. */
 
  rc = SQLBindCol (lake_cursor, 1, SQL_C_SLONG, &lake_perimeter, 0,
                   &length_ind);
  check_sql_err (NULL, island_cursor, rc, "SQLBindCol");
 
  /* ¿ÜºÎ ·çÇÁ(Outer loop), island id ¹× lakes(³»ºÎ ¸µ)ÀÇ ¼ö¸¦
  °¡Á®¿É´Ï´Ù. */
 
  while (SQL_SUCCESS == rc)
  {
    /* ¾ÆÀÏ·£µå »çÀü ÃßÃâ */
 
    rc = SQLFetch (island_cursor);
 
    if (rc != SQL_NO_DATA)
    {
      check_sql_err (NULL, island_cursor, rc, "SQLFetch");
 
      /* ³»ºÎ ·çÇÁ, ÀÌ island¿¡ ´ëÇØ ¸ðµç lakes(³»ºÎ ¸µ)ÀÇ Áְ踦
         °¡Á®¿É´Ï´Ù. */
 
      for (total_perimeter = 0,lake_number = 1;
           lake_number <= num_lakes;
           lake_number++)
      {
        rc = SQLExecute (lake_cursor);
        check_sql_err (NULL, lake_cursor, rc, "SQLExecute");
 
        rc = SQLFetch (lake_cursor);
        check_sql_err (NULL, lake_cursor, rc, "SQLFetch");
 
        total_perimeter += lake_perimeter;
 
        SQLFreeStmt (lake_cursor, SQL_CLOSE);
      }
    }
 
/* Island id ¹× lakes¿¡ ´ëÇÑ Àüü Áְ踦 Ç¥½ÃÇÕ´Ï´Ù. */
 
    printf ("Island ID = %d,  Total lake perimeter = %d\n",
             island_id,total_perimeter);
 
  }
 
  SQLFreeStmt (lake_cursor, SQL_DROP);
  SQLFreeStmt (island_cursor, SQL_DROP);
  SQLDisconnect (handle);
  SQLFreeConnect (handle);
  SQLFreeEnv (henv);
 
  printf( "\nTest Complete ...\n" );
 
}
 
static void check_sql_err (SQLHDBC handle, SQLHSTMT  hstmt, LONG rc,
                           CHAR *str)
{
 
    SDWORD dbms_err = 0;
    SWORD  length;
    UCHAR   err_msg[SQL_MAX_MESSAGE_LENGTH], state[6];
 
    if (rc != SQL_SUCCESS)
    {
      SQLError (SQL_NULL_HENV, handle, hstmt, state, &dbms_err,
                err_msg, SQL_MAX_MESSAGE_LENGTH - 1, &length);
      printf ("%s ERROR (%d): DBMS code:%d, SQL state: %s, message: 
              \n %s\n", str, rc, dbms_err, state, err_msg);
 
      if (handle)
      {
        SQLDisconnect (handle);
        SQLFreeConnect (handle);
      }
      exit(1);
    }
}
 


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]